at 一次性定时任务
|
|
访问控制
- 如果系统中有
/etc/at.allow
文件(白名单),那么只有在此文件的用户可以使用at命令(/etc/at.deny文件会被忽略); - 如果系统中没有
/etc/at.allow
文件,只有/etc/at.deny
文件(黑名单),那么在此名单下的用户不能使用at命令【对root不起作用】 - 如果系统这两个文件都不存在,那么只有root用户可以使用at命令
|
|
用户 crontab 循环定时任务
访问控制
- 当系统中有
/etc/cron.allow
文件(白名单),只有写入此文件的用户可以使用crontab命令,没有写入的用户不能使用crontab命令。同样如果有此文件,/etc/cron.deny
文件会被忽略,/etc/cron.allow
文件的优先级更高; - 如果系统中没有
/etc/cron.allow
文件,只有/etc/cron.deny
文件(黑名单),那么在此名单下的用户不能使用cron命令【对root不起作用】 - 如果系统这两个文件都不存在,那么只有root用户可以使用cron命令
被周期性执行的任务称为Cron Job
周期性执行的任务列表称为Cron Table
|
|
特殊符号 | 含义 | |
---|---|---|
* | 代表任何时间,如第一个* 代表每分钟执行一次 | |
, | 代表不连续的时间,如:0 8,12,16 *代表每天的8点0分/12点0分/16点0分执行 | |
- | 代表连续时间, “0 5 * 1-6”代表每周一到周六5点执行 | |
*/n | 代表每个多久执行一次,”/10 *”表示每10钟执行一次 |
注意
- 星期几与几号最好不要连用,因为都以天作为单位,容易让管理员混乱
- 六个选项都不能为空,必须填写。如果不确定使用
*
代表任意时间 - 最小有效时间为分钟,最大有效时间为月,像2018年某时执行,3点30分30秒这样的时间都不能使用
- 定时任务中的命令最好使用绝对路径,定时任务有自己的PATH路径(/etc/crontab)
时间 | 含义 |
---|---|
* 5 * * 1 /root/hello.sh | 每周一的5点的每分钟执行一次 |
*/1 * * * * date >> /tmp/log.txt | 每分钟打印当前时间到日志文件中 |
*/2 * * * * 1-59/2 * * * * |
每隔两分钟 |
* 2 * * * | 2点的每分钟 |
0 23-7/1 * * * * | 晚上23点到早上7点,每隔一个小时 |
0,30 * * * * 0-59/30 * * * * |
每隔30分钟 |
59 1 1-7 4 * test date +\%w -eq 0 && /root/a.sh |
四月的第一个星期日早晨1时59分运行a.sh |
每半分钟执行一次12*/1 * * * * date >> /tmp/date.log*/1 * * * * sleep 30s;date >> /tmp/date.log
系统 crontab 循环定时任务
contab -e
是每个用户执行的命令,也就是说不同的用户身份可以执行自己的定时任务,可是有些定时任务需要系统执行,这里我们就需要编辑/etc/crontab
这个配置文件了
/etc/crontab
的功能逐渐被anacron取代/etc/cron.{hourly,daily,weekly,monthly}
不再依赖/etc/crontab
而是anacron
主要说明CentOS
执行系统任务的方法
- 手工执行定时任务:crontab -e
- 系统定时任务
- 将定时任务脚本复制到
/etc/cron.{hourly,daily,weekly,monthly}
目录中,就能自动定时执行(推荐) - 修改crontab配置文件
- 将定时任务脚本复制到
crontab相关文件
- /etc/crontab #系统配置文件,只有root用户才会把这些内容载入到计任务表中
- /var/spool/cron #最终生成的计划任务文件
- /var/spool/cron/root #root用户的定时任务
- /var/spool/cron/user1 #user1用户的定时任务
- /var/log/cron #crontab日志,保存cron的任务执行记录,echo会打印到这里
- /var/log/cron-日期
anacron配置
anacron 是用来保证在系统关机的时候错过的定时任务,可以在系统开机之后再执行
检测周期
- anacron会使用一天、七天、一个月作为检测周期
- 在系统的
/var/spool/anacron
目录中存在cron.{daily.weekly,monthly}
文件,用于记录上次执行cron的时间 - 和当前时间做比较,如果两个时间的差值超过了anacron的指定时间差,证明有cron任务被漏执行
在老的CentOS版本中,/etc/cron.{daily.weekly,monthly}
这些目录即会被cron调用,也会被anacron调用,容易重复执行
在CentOS 6.x中则只会被anacron调用,避免了重复执行
在CentOS 6.x中,anacron不再是服务,而是系统命令
配置文件目录
/etc/anacrontab
方法
只需要将需要定时执行的任务脚本放到 /etc/cron.(daily,weekly,monthly) 目录下,就能自动定时执行
特点
方便,易管理,一定程度上防止意外情况,执行时间不确定