楼层: 首页/ 软件技术/ Linux/ 定时任务 cron
10

定时任务 cron

cron · at · scheduled jobs

"每天凌晨 3 点自动备份""每周一清理临时文件"——这种定时自动跑的活,交给 cron。你睡觉,它干活。

crontab:用户级定时任务

crontab -l # 看当前用户有哪些定时任务 crontab -e # 编辑(会打开编辑器) crontab -r # 全部删掉(慎用!)

每条任务一行,时间格式是五个星:分 时 日 月 周 + 要跑的命令。

五个字段从左到右:分(0-59) 时(0-23) 日(1-31) 月(1-12) 周(0-7,0和7都是周日)
写法含义
*每一个(每分/每时/每天…)。
,列举: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。