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/