Linux的计划任务
1.at服务是一个一次行执行的任务的工具
1.检查at 是否安装 chkconfig --list | grep atd
/etc/at.allow,白名单
/etc/at.deny,黑名单。
at +时间,会延期执行。 atq,会显示准备执行的命令列表。 at -c 命令号,会显示该命令的具体执行过程。
atrm [工作号] #删除指定的at任务
2.crontab 是一个用于设置周期性被执行的任务的工具
crontab 周期性执行的任务列表
cront job被周期性执行的任务
1.安装和检查crontab 是否安装 crontab -l
检查crond 服务是否开启 service crond status // 大部分服务都是*d
安装cron yum install vixie-cron
yum install crontabs
/cron/at.allow,白名单
/cron/at.deny,黑名单。
2.crontab -e 编辑一个crontab 任务
*/ * * * * date > /tmp/log.txt //没分钟打印一个日期到/tmp/log.txt
tail -f /tmp/log.txt 动态刷新文件显示
按crrl + c 停止
3.crontab 的组成
1>crond 系统服务 -----------》每分钟都会从配置文件刷新定时任务
2>配置文件 ------------------》文件方式设置定时任务(要加用户身份)
3>crontab 调整定时任务
分别表示 分钟,小时,日,月,星期(0-6)星期天是0或者7,
4.简单设置:
每晚21.30 重启apache服务
30 21 * * * service httpd restart
每月的 1.10,12 的4.45重启apache
45 4 1,10,12 * service httpd restart
每月的1到10号4.45重启apache
45 4 1-10 **service httpd restart
没两分钟重启apache
*/2 * * * * service httpd restart
晚上11-7 重启apache
0 23-7/1 * * * service httpd restart
每天18-23 每隔30分钟重启一次
1-59/30 18-23 * * * service httpd restart
*表示任何时候都匹配 可以用A,B,C,表示或A或B或C时执行mingl 可以用A-B表示A到B之间时执行命令 可以用*/A 表示每A分钟(小时等)执行一次命令
5.crontab使用
6.crontab的配置文件
1》全局配置文件:/etc/crontab
可以在/etc/crontab 中设置计划任务:直接输入即可:(要加用户身份:命令尽量写绝对路径)
2》var/spool/cron /root和crontab -l 中显示的相同。即crontab -e 修改的是var/spool/cron/root
1)手工执行定时任务 2)系统定时任务 - 第一种:把需要定时执行的脚本复制到/etc/cron.{daily,weekly,monthly}目录中的任意一个 - 第二种:修改/etc/crontab配置文件
7.crontab 的日志var/log/cron
8.进入/var/spool/mail可以看到cron以邮件的形式发送给root
9.常见的的错误:
1》命令行双引号使用%没有加\
四月的第一个星期天早晨1.59执行a.sh
错误的: 59 1 1-7 4 0 /root/a.sh
第三和五域之间 执行的是 “或”操作 原来是想这 四月的第一个星期日早晨1时59分运行a.sh 59 1 1-7 4 0 /root/a.sh 但是实际上 1-7 与 0 是或的 关系,实际上会在4月的1-7日 每天都会执行,并且当星期数为星期七时,也会执行,所以执行次数多达11次。 所以应该把星期的判断 放在执行的脚本上。
正确:59 1 1-7 4 * test `date +\%w` -eq 0 && /root/a.sh用test判断是否为星期天
2》分钟设置错误
没两个小时执行一次
错误: * */2 * * * date //每分钟都会执行
正确: 0 */2 * * * * date
9.每半分钟执行一次
配合sleep
*/1 * * * * sleep 30s ;date
10.anacron:
anacron用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行。 检测周期:一天、7天、一个月。上次执行cron的时间与当前时间比较,若两个时间的差值超过了anacron的指定时间,证明有cron任务被执行。
CentOS 6.x的区别
在老的CentOS版本中,/etc/cron.{daily,weekly,monthly},这些目录即会被cron调用,也会被anacron调用,容易重复执行
在CentOS 6.x中则只会被anacron调用,避免重复执行
在CentOS 6.x中,anacron不再是服务,而是系统命令
anacron配置文件
vi /etc/anacrontab
RANDOM_DELAY=45 #最大随机延迟
START_HOURS_RANGE=3-22 #anacron执行时间范围
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weeky nice run-parts /etc/weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
上面 1 7 @monthly 表示时间间隔1天 5天 一个月以上
5 25 是强制延迟时间 也就是后面文件强制推迟延迟执行这么多分钟
具体以cron.daily工作过程举例:
首先读取/var/spool/anacron/cron.daily中的上一次anacron执行时间和当前时间比较,
如果两个时间的差值超过1天,就执行cron.daily工作,执行这个工作只能在03:00~22:00之间
执行工作时强制延迟时间为5分钟,再随机延迟0~45分钟的时间
使用nice命令指定默认优先级,使用run-parts脚本执行/etc/cron.daily目录中的所有可执行文件