码迷,mamicode.com
首页 > 系统相关 > 详细

Linux下的计划任务和日志管理

时间:2015-07-30 02:20:01      阅读:989      评论:0      收藏:0      [点我收藏+]

标签:日志记录   服务器   虚拟机   linux   计划任务   

Linux下的计划任务和日志管理

 

一:实验环境:

1:虚拟机

2:两个linux系统

二:实验目标

1:at 定制单次执行的计划任务

2:cron定制周期性计划任务

3:配置脚本实现周期性任务

4:配置公司内网服务器每天自动开关机

5:Linux系统日志记录规律

6:自定义日志记录方式

7:配置远程收集日志服务器

三:实验步骤

1):at 定制单次执行的计划任务

第一块

at 定制单次执行的计划任务

前提:服务:atd  必须开启

#查询atd是否运行,只有运行,才能工作。

[root@localhost ~]# /etc/init.d/atd status

atd (pid 2410) 正在运行...

#如果要是atd没有运行的话,就执行start命令。进行激活。

[root@localhost ~]# /etc/init.d/atd start

实例:

[root@localhost ~]# date #查看当前时间

2015 07 21星期二 08:32:32 CST

[root@localhost ~]# at 08:34  #设定时间

at> echo `date`> /tmp/date.txt  #在8点34分的时候,在/tmp下建立date.txt文件,切显示“date”时间。

at> <EOT>    #按下Ctrl+D 结束

job 1 at 2015-07-21 08:34  #8:34

查询:

[root@localhost ~]# date

2015 07 21星期二 08:34:21 CST

[root@localhost ~]# ls /tmp/date.txt

/tmp/date.txt

[root@localhost ~]# cat !$

cat /tmp/date.txt

2015 07 21星期二 08:34:00 CST

 #8.34分的时候在/tmp/date.txt下出现时间“2015 07 21星期二 08:34:00 CST

拓展:

第二块

执行的计划任务也可以这样写

#at  08:34 2015-7-21

#at now+10min

例子1

[root@localhost ~]# date

2015 07 21星期二 08:50:21 CST

[root@localhost ~]# at 8:51 2015-7-21  #创建任务

at> echo abcd > /tmp/a.txt  ##在8:51分的时候,在/tmp下建立a.txt文件 ,并在文件中输入abcd

at> <EOT>

job 3 at 2015-07-21 08:51  #job”工作,任务,指在2015721日的851分下执行任务3

[root@localhost ~]# ls /tmp/a.txt  #查看在/tmp下是否创建了/a.txt文件

/tmp/a.txt    #创建了a.txt的文件

[root@localhost ~]# cat !$ #查看创建的文件里是否输入了“abcd”的内容。

cat /tmp/a.txt

abcd

例子2

[root@localhost ~]# date

2015 07 21星期二 09:01:36 CST

[root@localhost ~]# at now+3min

at> echo abcde > /tmp/b.txt

at> <EOT>

job 4 at 2015-07-21 09:05

[root@localhost ~]# at –l  #查看任务列表

4       2015-07-2109:05 a root   #2015-07-21 09:05时候有一个四号任务

[root@localhost ~]# ls /tmp/b.txt

/tmp/b.txt

[root@localhost ~]# cat !$

cat /tmp/b.txt

abcde

 

第三块

执行成功的at计划任务会在这个目录下成生一个可执行的脚本文件:

[root@localhost ~]# ll/var/spool/at/*

-rwx------  1root   root   3842 Feb 3 20:45 /var/spool/at/a00002016a5170

-rwx------  1root   root   3842 Feb 3 20:45 /var/spool/at/a000030169e127

#vim+/var/spool/at/a00002016a5170是可以进入这个任务的,并且可以看到这个任务的内容。

 

at任务删除:

atrm  at序列号

[root@localhost ~]#atrm 4

#这个时候任务列表会将4号任务取消,切在/var哪里的脚本也会消失。

 

2):cron定制周期性计划任务

第一块

周期性计划任务:

配置文件:

[root@localhost ~]# vim /etc/crontab

# Example of job definition:

# .---------------- minute (0 - 59)

# |  .-------------hour (0 - 23)

# | |  .---------- day of month (1 -31)

# | |  |  .------- month (1 - 12) OR jan,feb,mar,apr...

# | |  |  | .---- day of week (0 - 6) (Sunday=0 or 7) OR sun,mon,tue,wed,thu,fri,sat

# | |  |  |  |

# * *  *  *  *user-name command to be executed

 

服务:crond

[root@localhost ~]# /etc/init.d/crondstatus

crond (pid 2399) 正在运行...

 

[root@localhost ~]# chkconfig --list crond   #查看是否开机启动

crond             0:关闭      1:关闭      2:启用      3:启用      4:启用      5:启用      6:关闭

[root@localhost ~]# chkconfig crond on  #如果不是开机启动,执行这条命令就会自动开启

 

第二块

针对用户级别的计划任务:对于root用户:

命令:

#crontab –e   创建一个计划任务 

#crontab –l    显示

#crontab –r   删除计划任务

 

1#crontab –e  创建一个计划任务 

[root@localhost ~]# date

2015 07 21星期二 09:54:33 CST

[root@localhost ~]# crontab -e

55 09 * * * echo `date` >/tmp/date.txt

[root@localhost ~]# ls /tmp/date.txt

/tmp/date.txt

[root@localhost ~]# cat !$

cat /tmp/date.txt

Tue Jul 21 09:55:02 CST 2015

 

3):配置脚本实现周期性任务

第一块

例: 特殊写法:

#9,18,22这几天的3点1分,开始执行备份脚本

1  3 9,18,22  * *  /usr/bin/back.sh  #在默认的每个月中的9.18.22号这三天的3点1分都进行备份,备份到/usr/bin/back.sh下

#每月9-18日,这几天的3点1分执行

1  3  9-18  * * /usr/bin/back.sh

#每5分钟,执行一次

*/5  *  *  * * /usr/bin/back.sh

例:

每天删除5天前的文件

1  1  * **  find /home/log/ -type f -mtime +5-exec rm {} \;

 

第二块

使用root身份,给其它普通用户指定crontab:

语法:crontab-u USERNAME  -e/-l/-r

例子:

[root@localhost ~]# ls /home  #查看普通用户

laoyu

[root@localhost ~]# crontab -u laoyu –e  #给普通用户创建一个任务

1 * * * *  touch /tmp/a.txt  #让其每分钟都在/tmp下创建一个文件

[root@localhost ~]# crontab -u laoyu –l  #对创建的任务进行显示

1 * * * * touch /tmp/a.txt

[root@localhost ~]# crontab -u laoyu –r  #对于创建的任务进行删除,这里的删除是所有的,不能够一条一条的删除

[root@localhost ~]# crontab -u laoyu –l  #再次查看,不在存有任务

no crontab for laoyu

 

第三块

实例:

“1  3  9-18  **  /usr/bin/back.sh”命令执行之后的某一天里3点钟之前突然停电,在3点10分之后才来电,那么在这个时候正好错过了备份的时间,数据又很重要,不能让数据丢失,那这个时候怎么办呢?

Anacron:2

cron用控制循环执行例行性工作。如果我要设定机器每早8点进行备份用服务。除非我机器保证在8点这个时间点不会关机,如果关机了,cron中的脚本,在下次开机将不会被执行。anacron并没有取代cron的意思,anacron用于,机器重启后,会侦测停机期间,有没有cron没有执行的计划任务,如果有,会立即,执行一下没有执行的任务。

 

4):实战,配置服务器定时开机

BIOS

SVN

通过键盘上的箭头选择PowerManagement Setup,就进入电源管理设置了。

                           技术分享

 

1.    通过回车进入这个设置后,选择Wake Up Event Setup,回车选择Press Enter。

技术分享

 

2.    最后,在这个界面内继续找到Resume By RTC Alarm,回车选择一下。

技术分享

 

3.    继续回车选择,将Disabied 更改为Enabled,然后继续回车确定。然后再继续设置时间点和日期。

技术分享

 

4.    然后选择日期,并且选择你需要电脑每天需要在几点开机,当然,要保证你的主板时间是准确的。

技术分享

5.    假如你需要每天都定时开机,就选择EveryDay,,你如果想要在每天6:45开机,就通过数字键输入06:45:00,最后,一般按F10 进行保存,重启电脑后生效!

技术分享

 

 

 

5):Linux系统日志记录规律

第一块

日志管理

目录:

/var/log

常用的系统日志如下:

核心启动日志:/var/log/dmesg
系统报错或重启服务等日志:/var/log/messages
邮件系统日志:/var/log/maillog

cron(定制任务日志)日志:

/var/log/cron   #计划日志执行成功与否,在这个文件中看

/var/log/secure  #验证系统用户登录

文件 /var/log/wtmp 记录所有的登入和登出。 

例:

[root@xuegod63~]# last   #查看所有登录过系统的用户和IP,会看到一系列的日志

[root@xuegod63~]# > /var/log/wtmp  #清空日志

[root@xuegod63~]# last #这时在查看的时候就不在看到一系列的日志了

 

文件 /var/log/lastlog 记录每個用戶最后的登入信息。

例:

[root@xuegod63~]# lastlog

Username        Port     From             Latest

root             tty1                      Tue Dec 18 22:22:39 +08002012

文件 /var/log/btmp 记录错误的登入尝试。

[root@xuegod63~]# lastb  #查看谁在尝试登录系统

root     tty1                          Tue Dec 18 09:45 - 09:45  (00:00)   

[root@xuegod63~]# ll /var/log/btmp

-rw-------.1 root utmp 384 Dec 18  2012 /var/log/btmp

#当你使用这个命令查看的时候发现文件的容量过大,那么就说明有人想要登陆你的系统

测试:

[root@xuegod63~]# ssh 192.168.1.63

#远程连接1.63,且故意输错密码。

[root@xuegod63~]# lastb

mk       ssh:notty    xuegod63.cn      Tue Feb 3 21:28 - 21:28  (00:00)   

mk       ssh:notty    xuegod63.cn      Tue Feb 3 21:28 - 21:28  (00:00)   

mk       ssh:notty    xuegod63.cn      Tue Feb 3 21:28 - 21:28  (00:00)   

root     ssh:notty    xuegod63.cn      Tue Feb 3 21:28 - 21:28  (00:00)   

再次查看的时候,发现就会有用户登陆错误的日志提示

 

6):自定义日志记录方式

第一块

日志记录方式: 先分类,然后每个类中再分级别

主要7种日志分类(FACILITY):

authpriv     安全认证相关

cron       at和cron定时相关

daemon     后台进程相关

kern       内核产生

lpr        打印系统产生

mail       邮件系统相关

syslog     日志服务本身

news       新闻系统  (和BBS差不多,新闻组)

uucp       uucp系统产生 。Unix-to-Unix Copy(UNIX至UNIX的拷贝),Unix系统的一项功能,允许计算机之间以存储-转发方式交换e-mail和消息。在Internet兴起之前是Unix系统之间连网的主要方式。

local0到local7   #共8个类型,系统保留的:8个系统日志类型,给其它程序使用。或用户 自定义用

第二块

8个日志级别:以下排列,由轻到重

级别(PRIOROTY):

debug                 排错信息。开发人

info                  正常信息

notice                稍微要注意的

warn                  警告

err(error)            错误

crit(critical)         关键的错误;批评,比err更为严重

alert                 警报警惕

emerg(emergency)      紧急,突发事件

 

7):记录日志的位置

第一块

日志服务:

1).rhel5

服务名称:syslog

配置文件:

#vim/etc/syslog.conf

2).RHEL6:rsyslog

配置文件:

[root@localhost~]# vim /etc/rsyslog.conf #进入配置文件显示内容如下:

*.info;mail.none;authpriv.none;cron.none                /var/log/messages           

#“*”表示所有级别 “info”表示info级别以上的所有日志都记录在/var/log/messages下。但是info以上级别中的mail,authpriv等级别的日志不再记录在/messages日志中。

例:

1.kern.*  内核类型的所级别日志

2*.info;mail.none;news.none;authpriv.none;cron.none:由于mail, news, authpriv, cron 等类别产生的讯息较多,因此在/var/log/messages 里面不记录这些项目。除此其他讯息都写入 /var/log/messages中。所以messages 文件很重要

3.authpriv.* 认证方面的讯息均写入 /var/log/secure 档案;

4.mail.*:邮件方面的讯息则均写入 /var/log/maillog 档案;

5.cron.*:例行性工作排程均写入 /var/log/cron 档案;

6.local7.*:将本机开机时应该显示到屏幕的讯息写入到 /var/log/boot.log 档案中;

第二块

/etc/rsyslog.conf  中日志输入规则:

例:

.  :代表『比后面还要高的等级都被记录下来』的意思,

例如: mail.info 代表只要是mail 类型的信息,而且该信息等级高于 info (包括info 本身)时,就会被记录下来的意思。

.= :代表所需要的等级就是后面接的等级而已,其他的都不要!

.! :代表不等于,亦即是除了该等级外的其他等级都记录。

举例:

cron.none   对于cron类型日志不记录任何信息

cron.=err   对于cron类型日志只记录err级别的信息

cron.err    对于cron类型日志记录大于err级别的信息

cron.!err   对于cron类型日志不记录err级别的信息,其他级别都记录。

 

[root@localhost~]# vim /etc/rsyslog.conf  #进入配置文件显示内容如下

#Log all the mail messages in one place.

mail.*                                                 -/var/log/maillog

问:

在上面的关于 mail 的记录中,在记录的档案 /var/log/maillog 前面还有个减号『 - 』是干嘛用的?

答:

由于邮件所产生的讯息比较多,因此我们希望邮件产生的讯息先储存在速度较快的内存中 (buffer) ,等到数据量够大了才一次性的将所有数据都填入磁盘内这样将有利于减少对磁盘读写的次数减少IO读写开销。另外,由于讯息是暂存在内存内,因此若不正常关机导致登录信息未写入到文档中,可能会造成部分数据的遗失。

 

第三块

服务重启和开机启动:

#service rsyslogrestart;  

#chkconfig rsyslog on

日志的存储格式(怎么看日志):

DATA TIME HOSTNAME APP(NAME)   [PID]:       MESSAGES

说明:

DATA TIME:日志记录的日期和时间

HOSTNAME APP(NAME)   [PID]:什么机器,什么程序(程序的PID):

[root@localhost ~]# vim/var/log/messages

May 29 23:19:33localhost kernel: Initializing cgroup subsys cpuset

#在5月29号23点19分33秒 ,主机名为localhost,APP的名字为内核,发布了以下信息

第四块

例:sshd+rsyslog练习(sshd单独记录一个叫sshd.log的日志文件):

local0

修改配置文件:

[root@localhost ~]# vim/etc/ssh/sshd_config修改:

 SyslogFacility AUTHPRIV  

为:

#SyslogFacility  local0

重启:

[root@localhost~]# service sshd restart

停止 sshd:                                               [确定]

正在启动 sshd:                                            [确定]

 

修改配置文件:

 

[root@localhost ~]# vim /etc/rsyslog.conf #在最后添加一行

local0.*           /var/log/sshd.log

重启:

[root@localhost ~]# service rsyslog restart

关闭系统日志记录器:                                       [确定]

启动系统日志记录器:                                       [确定]

 

[root@localhost ~]# ls /var/log/sshd.log  #查看,在/var下产生了sshd.log日志,

/var/log/sshd.log

[root@localhost ~]# cat !$  #打开查看的时候,里面根本就没任何内容

cat /var/log/sshd.log

没有内容,重启一下服务看看。

[root@localhost ~]# service sshd restart

停止 sshd:                                               [确定]

正在启动 sshd:                                            [确定]

[root@localhost ~]# cat /var/log/sshd.log #再次查看到 时候我们就看到产生一些日志

Jul 22 10:54:38 localhost sshd[31703]:Received signal 15; terminating.

Jul 22 10:54:38 localhost sshd[31780]: Serverlistening on 0.0.0.0 port 22.

Jul 22 10:54:38 localhost sshd[31780]: Serverlistening on :: port 22.

第五块

如何防止日志被黑客删除呢?

[root@localhost~]# chattr +a /var/log/sshd.log  # 给这条日志添加一条新的命令 “+a”

[root@localhost~]# rm -rf !$ #删除实验,可以看到这个时候的日志是无法删除的

rm-rf /var/log/sshd.log

rm:无法删除"/var/log/sshd.log": 不允许的操作

[root@xuegod63~]# lsattr /var/log/sshd.log

-----a-------e-/var/log/sshd.log

[root@xuegod63~]# tail -f /var/log/sshd.log   #下面远程连接一下,可以看到日志

[root@xuegod63~]# ssh 192.168.1.63

 

加入了这个属性后,你的 /var/log/messages 登录档从此就仅能被增加,而不能被删除,直到 root 以『 chattr -a /var/log/messages 』取消这个 a 的参数后,才能被删除移喔!

 

第六块 -- 了解

日志回滚:

logrotate(日志回滚过程: 创建新文件、改名旧文件。)

配置文件:

#vim/etc/logrotate.conf

#vim /etc/logrotate.d/* 

[root@localhost ~]# vim  /etc/logrotate.conf


weekly <==预设每个礼拜对日志档进行一次 rotate 的工作

 rotate  4<==保留几个日志文档呢?预设是保留四个!

 create <== 回滚日志后,创建一个新的空文件来存储新的数据。

 

/var/log/wtmp {

    monthly

    create 0664 root utmp

        minsize 1M

    rotate 1

}

说明:

/var/log/wtmp { <==仅针对 /var/log/wtmp 所设定的参数

 monthly <==每个月一次,取代每周!

minsize 1M <==档案容量一定要超过 1M 后才进行rotate (略过时间参数)

create 0664 root utmp<==设定新建文件的权限 、所有者、用户组

rotate 1 <==仅保留一个,亦即仅有 wtmp.1 保留而已。 }

 

 

 

 

8):配置远程收集日志服务器

1. 配置SERVER端(接收端):xuegod63 服务端。 xuegod64做客户端

[root@bogon ~]# vim/etc/rsyslog.conf
将:

# Provides TCP syslogreception

#$ModLoad imtcp.so

#$InputTCPServerRun 514

改为:

# Provides TCP syslogreception
$ModLoad imtcp.so  
$InputTCPServerRun 514

[root@bogon ~]# servicersyslog  restart 

[root@xuegod63 log]#netstat -anutp | grep 514

tcp        0     0 0.0.0.0:514                0.0.0.0:*                   LISTEN      7426/rsyslogd      

tcp        0     0 :::514                     :::*                       LISTEN      7426/rsyslogd

     

2. 配置CLIENT端(发送端):

# vim /etc/rsyslog.conf   #在最后添加
*.*   @@192.168.1.64:514

[root@xuegod64 ~]#/etc/init.d/rsyslog restart

查看:

[root@xuegod63 log]#tail -f /var/log/messages

 

 


本文出自 “末班车” 博客,谢绝转载!

Linux下的计划任务和日志管理

标签:日志记录   服务器   虚拟机   linux   计划任务   

原文地址:http://blxueyuan.blog.51cto.com/9673381/1679772

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!