企鹅日记(十五):例行性工作排程crontab

linux系统常见的例行性任务有:

× 进行日志文件的论替(log rotate)

× 日志文件分析logwatch的任务

× 新建locate的数据库

× whatis 数据库的建立

× RPM软件日志文件的新建

× 删除临时文件,通过tmpwatch命令来删除这些临时文件

× 与网络服务有关的分析行为

====仅执行一次的工作调度at====

先要启动atd这个服务:

# /etc/init.d/atd restart

设置开机就自动启动请执行:

# chkconfig atd on

at运行原理:事实上,我们使用at命令来生成所要运行的工作,并将这个工作以文本方式写入/var/spool/at/ 目录内,该工作便能等待atd服务的取用和执行了,就是这么滴简单。

at的授权管理:通过/etc/at.allow  /etc/at.deny这两个配置文件限制

1,先寻找/etc/at.allow这个文件,写在这个文件中的用户才能使用at,没有在其中的不能使用at(不管at.deny文件)

2,如果/etc/at.allow不存在,就寻找/etc/at.deny,若写在这个文件的用户则不能使用at,否则就可以使用at

3,如果两个文件都不存在,那么只有root可以使用at

上面两个配置文件中,一行一个帐号名即可

# at [-mldv] TIME

# at -c 工作号码

-m:当at工作完成后,即使没有输出信息,以email通知用户该工作已完成

-l:at -l 相当于atq,列出目前系统上面所有该用户的at调度

-v:可以使用较明显的时间格式列出at调度中的任务列表

-c:列出后面接的该项工作的实际命令内容

TIME的格式有:

HH:MM:在今天的HH:MM时刻进行,如果已超过该时刻,那么明天的HH:MM执行

HH:MM YYYY-MM-DD:强制规定某年某月某日某时某分执行

HH:MM[am|pm] [Month] [Date]   –> 04pm March 17

HH:MM[am|pm] + number [minutes|hours|days|weeks]  –> 04pm + 3 days  –> now + 3 minutes

$ at now + 5 minutes
at> /bin/mail root -s “tesing at job” < /root/.bashrc
at> <EOT>   <===在这里输入CTRL + D可以结束输入,出现一个EOT就代表结束
job 1 at Mon Oct 29 21:12:00 2012

最好使用绝对路径来执行命令

使用at命令在某时刻在终端中显示消息hello:

# echo “hello” > /dev/tty1

删除at的工作:

# at -l

# atrm [jobnumber]

batch:系统有空时才进行后台的任务,否则等待暂缓执行,内部还是使用的at

# batch 23:00 2012-3-23

====循环执行的工作调度crontab====

与at类似,对于crontab的权限控制也是两个配置文件:/etc/cron.allow   /etc/cron.deny,检查顺序也跟之前相同。

当用户使用crontab这个命令新建工作调度后,该项工作被记录到/var/spool/cron/ 里面去了,而且是以帐号作为判别的。距离来说,yidao这个帐号的工作会被记录到/var/spool/cron/yidao这个文件中去

日志文件记录在/var/log/cron这个日志文件中

# crontab [-u username] [-l|-e|-r]

-u:只有root用户可以使用这个参数,帮其他用户新建或删除crontab工作调度

-e:编辑crontab的工作内容

-l:查阅crontab的工作内容

-r:删除所有crontab的内容,若仅想删除一项,用-e去编辑删除一项即可

$ crontab -e

0 12 * * * mail test -s “at 12:00″ < /home/yidao/.bashrc

# 分 时 日 月 周 命令

几个特殊符号:

* 代表任何时刻

, 代表枚举的意思,比如3点和6点都执行:0 3,6 * * * command

- 代表区域选择,比如8点到12点之间的每小时的第20分钟都执行:20 8-12 * * * command

/n 那个n代表数字,即使每隔n单位间隔的意思,例如每5分钟都进行一次:*/5 * * * * command 或者 0-59/5 * * * * command

====系统的配置文件:/etc/crontab====

刚才我们讲的crontab -e是针对用户设置的,那如果是系统的例行性任务呢,你只要编辑/etc/crontab这个配置文件即可。编辑完后需要重启crond这个服务:/etc/init.d/crond restart

# vi /etc/crontab

…..

# run-parts

01 * * * * root run-parts /etc/cron.hourly  <==每小时

02 4 * * * root run-parts /etc/cron.daily  <==每天

22 4 * * 0 root run-parts /etc/cron.weekly  <==每周日

42 4 1 * * root run-parts /etc/cron/montyly  <==每个月1号

后面可以自己随便加

/etc/cron.hourly  /etc/cron.daily 这些都是目录,意思就是放在这里面的bash脚本会自动执行,如果你自己想执行些脚本,可以建立一个目录,然后把脚本放里面,之后在/etc/crontab配置文件里加一行就行了。还有一种方式就是直接在/etc/crontabv中写命令也行。

安全检查:

很多时候被植入木马都是以例行性命令方式植入的,所以可以检查/var/log/cron里面的内容来查看是否有非你设置的cron被执行了。

周与日、月不可同时并存

====可唤醒停机时期的工作任务anacron====

anacron并不能指定何时执行某任务,而是以天为单位或者是开机后立刻执行进行anacron的操作,她会检测停机期间应该进行但没有进行的crontab任务,并将该任务执行一遍,然后anacron就会自动停止了。

anacron其实是一个程序而并非一个服务(deamon),这个程序在centos当中已经进入了crontab的调度。默认会以一天、七天、一个月为期检测系统未进行的crontab任务。

# anacron [-sfn] [job]…

# anacron -u [job]…

-s:开始连续执行各项工作job,会依据时间记录文件的数据判断是否进行

-f:强制进行,而不去判断时间记录文件的时间戳

-n:立刻进行未进行的任务,而不是延迟等待时间

-u:仅更新时间记录文件的时间戳,不进行任何工作

job:由/etc/anacrontab定义的各项工作名

实际上若执行:

# anacron -s cron.daily

anacrontab先从/var/spool/anacron/cron.daily取出最近一次执行anacron的时间戳,然后与目前时间进行对比,如果差异大于等于1天,开始执行run-parts /etc/cron.daily这串命令。

所以,anacron并不需要额外设置,只要设置anacron开机运行就行了:

=======================END==========================

 

本人博客已搬家,新地址为:http://yidao620c.github.io/

猜你喜欢

转载自yidao620c.iteye.com/blog/1841986