10
定时任务 cron
cron · at · scheduled jobs
"每天凌晨 3 点自动备份""每周一清理临时文件"——这种定时自动跑的活,交给 cron。你睡觉,它干活。
crontab:用户级定时任务
crontab -l # 看当前用户有哪些定时任务
crontab -e # 编辑(会打开编辑器)
crontab -r # 全部删掉(慎用!)
每条任务一行,时间格式是五个星:分 时 日 月 周 + 要跑的命令。
| 写法 | 含义 |
|---|---|
* | 每一个(每分/每时/每天…)。 |
, | 列举:1,3,5 表示 1、3、5。 |
- | 范围:9-18 表示 9 点到 18 点。 |
*/n | 每隔 n:*/5 表示每隔 5 个单位。 |
30 2 * * * | 每天凌晨 2:30。 |
0 3 * * 1 | 每周一凌晨 3 点。 |
*/10 * * * * | 每 10 分钟一次。 |
0 0 1 * * | 每月 1 号零点。 |
三个实用 cron 例子
# 每天凌晨 3 点备份网站
0 3 * * * /home/jianma/backup.sh >> /var/log/backup.log 2>&1
# 每周日凌晨 4 点清理 7 天前的临时文件
0 4 * * 0 find /tmp -type f -mtime +7 -delete
# 每天早上 8 点把磁盘使用情况发一份报告
0 8 * * * df -h | mail -s "磁盘日报" admin@example.com
cron 的三个经典坑
① cron 没有你手动敲命令时的环境变量——PATH 很精简,脚本里命令一律写绝对路径。② 不显示错误,所以末尾加 >> 日志 2>&1 把输出存下来,出问题才查得到。③ 编辑保存后不用重启任何服务,crontab -e 保存即生效。
系统级 cron 与 at
级系统级任务放哪
/etc/crontab:系统级 crontab,比用户版多一个"以谁的身份跑"字段。/etc/cron.d/:软件包放自己的任务文件。/etc/cron.hourly|daily|weekly|monthly/:把脚本丢进去,分别按小时/天/周/月自动跑,不用写时间格式。
anacron:电脑关机时错过的任务,开机后补跑——笔记本、桌面机用它;服务器 7×24 开机用普通 cron 就行。
at:只跑一次的定时。echo "reboot" | at 23:00 今晚 11 点只重启一次。
at 用法
echo "/path/backup.sh" | at 23:00 # 今晚 11 点跑一次
atq # 看待跑的任务
atrm 5 # 删掉编号 5 的待跑任务
记
本章小结
① 时间五段:分 时 日 月 周;特殊符 * , - */n。crontab -e 编辑、-l 查看。
② 脚本写绝对路径、输出重定向到日志,保存即生效。
③ 系统级放 /etc/cron.d/ 或 /etc/cron.daily/;只跑一次用 at。