linux管理:任务计划
crontab调用date时%需转义:
* 17 * * * who > /tmp/`date '+\%F'`.log
crontab格式
45 4 1,10,22 * * #逗号分隔
0,30 18-23 * * * #- 连续
0 */8 * * * #每隔8小时重启一次
* 23-7/2 * * * #23点-早上7点, 每两小时
0 11 4 * mon-wed date #周一 ~ 周三
0 4 1 jan * date #一月
防止脚本冲突 flock/lockf
间隔任务,当次未完成时, 下次任务不会执行
*/10 * * * * (lockf -s -t 0 /tmp/create.lock python /data/task.py >> /tmp/task.log 2>&1)
linux下的其他2种任务计划
at服务:
- 指定一个时间执行一个任务,==执行一次==后就不用
- 需要一个atd的系统后台进程
- /var/spool/at目录
/etc/at.allow和/etc/at.deny控制用户使用at权限
#at now+2 minutes 回车 >输入要执行的命令 >ctrl+d 结束输入
命令 | 描述 |
---|---|
atq | 查询当前的待执行任务(任务编号id) |
atrm | 删除等待任务,无指定id,删除所有 |
anacrontab系统级别的计划任务及其扩展
配置文件: /etc/anaconrtab
- 了解就行了,不要更改
- /etc/cron.deny这个配置文件来控制, 同时写入allow 及deny
/etc/anaconrtab格式:
period(频率.天数) | delay(延迟,分钟) | job-identifier | command |
---|---|---|---|
1 | 65 | cron.daily | run-parts /etc/cron.daily |
7 | 70 | cron.weekly | run-parts /etc/cron.weekly |
30 | 75 | cron.monthly | run-parts /etc/cron.monthly |
第一行的意思是:每天开机65分钟后就检查cron.daily文件是否被执行了,如果今天没有被执行就执行他
第二行的意思是:每隔7天开机后70分钟检查cron.weekly文件是否被执行了,如果一周内没有被执行就执行他