crontab cron 定时任务
crontab 是经典的 Unix 调度器:五个时间字段加一条命令,按服务器时区运行。 选择一个调度,查看精确表达式、可直接粘贴的配置和接下来的运行时间。
调度
- 每 5 分钟
*/5 * * * * - 每小时
0 * * * * - 每分钟
* * * * * - 每 10 分钟
*/10 * * * * - 每 15 分钟
*/15 * * * * - 每 30 分钟
*/30 * * * * - 每天零点
0 0 * * * - 每天早上 9 点
0 9 * * * - 工作日早上 9 点
0 9 * * 1-5 - 每周一
0 0 * * 1 - 每月 1 号
0 0 1 * * - 每 6 小时
0 */6 * * * - 每周日零点
0 0 * * 0 - 每 2 小时
0 */2 * * * - 每 12 小时
0 */12 * * * - 每天中午 12 点
0 12 * * * - 每周五
0 0 * * 5 - 每月最后一天无法转换
- 每季度
0 0 1 */3 * - 每 2 分钟
*/2 * * * * - 每 3 小时
0 */3 * * * - 每天早上 6 点
0 6 * * * - 每天晚上 6 点
0 18 * * * - 每天两次
0 */12 * * * - 工作日晚上 6 点
0 18 * * 1-5 - 周末上午 10 点
0 10 * * 0,6 - 每月 15 号
0 0 15 * * - 每月第一个周一无法转换
- 每月最后一个周五无法转换
- 每年一次
0 0 1 1 * - 每 30 秒无法转换
- 每 3 分钟
*/3 * * * * - 每 20 分钟
*/20 * * * * - 每 4 小时
0 */4 * * * - 每 8 小时
0 */8 * * * - 每天凌晨 1 点
0 1 * * * - 每天凌晨 2 点
0 2 * * * - 每天凌晨 3 点
0 3 * * * - 每天早上 8 点
0 8 * * * - 每个工作日
0 0 * * 1-5 - 每个周末
0 0 * * 0,6 - 每周二
0 0 * * 2 - 每周三
0 0 * * 3 - 每周四
0 0 * * 4 - 每周六
0 0 * * 6 - 每 6 个月
0 0 1 */6 * - 每 10 秒无法转换
- 每 5 秒无法转换
crontab 的坑
% 会被当成换行crontab 行里未转义的 % 会结束命令,后面的内容被送到标准输入。日期格式里要写 \%。
日和星期是“或”两个日期字段都写了值时,任一匹配就运行,除非其中一个以 * 开头。0 0 1 * 1 会在每月 1 号和每个周一运行。
环境变量很少任务以很短的 PATH、非登录 shell 运行。用绝对路径,并在 crontab 顶部设置变量。
错过的不会补跑到点时机器关着,这次就跳过了。需要补跑请用 anacron 或设置了 Persistent=true 的 systemd timer。
与 crontab 互转
常见问题
crontab 的定时任务按哪个时区运行?
按服务器本地时区。cronie 会对其后的条目应用 CRON_TZ= 行;依赖它之前请确认系统用的是哪种 cron。
怎么编辑 crontab?
crontab -e 编辑,crontab -l 查看。每行是五个时间字段加命令。
crontab 里周日是 0 还是 7?
都可以。crontab 的 0 和 7 都表示周日,也可以写 SUN。