常用 Cron 表达式
这里汇集了实际工作中最常用的标准 5 字段 Cron 表达式。点击卡片即可复制表达式,粘贴到 Cron 工具还能看到通俗的解释和接下来几次的运行时间。卡片顶部的色带在一天(按星期、按日期的条目则为一周、一月、一年)的时间轴上标出了任务的触发时刻。
打开工具 →每分钟
* * * * *每 5 分钟
*/5 * * * *每 10 分钟
*/10 * * * *每 15 分钟
*/15 * * * *每 30 分钟
*/30 * * * *每小时整点
0 * * * *每小时的第 30 分
30 * * * *每 3 小时
0 */3 * * *每 6 小时
0 */6 * * *工作时段每小时(9 点到 18 点)
0 9-18 * * *每天午夜
0 0 * * *每天上午 9 点
0 9 * * *每天 9 点和 18 点
0 9,18 * * *夜间批处理(凌晨 2:30)
30 2 * * *工作日上午 9 点
0 9 * * 1-5周末午夜
0 0 * * 0,6每周一 8 点
0 8 * * 1每周五 18 点
0 18 * * 5每周日凌晨 4 点
0 4 * * 0每月 1 日午夜
0 0 1 * *月末区间 23 点(28 日到 31 日)
0 23 28-31 * *每季度首日午夜
0 0 1 1,4,7,10 *每年 1 月 1 日午夜
0 0 1 1 *常见问题
- Cron 的 5 个字段分别代表什么?
- 从左到右依次是:分钟(0-59)、小时(0-23)、日(1-31)、月(1-12)、星期(0-6,0 代表周日)。不少实现也接受用 7 表示周日,但写 0 在哪里都通用。如果同时限定日和星期,大多数 cron 会按"或"的关系解释,导致执行得比预期更频繁,因此建议像本页的示例一样只用其中一个。
- 这些计划任务在哪个时区运行?
- Cron 跟随运行守护进程的服务器所在时区。如果服务器使用 UTC,这里写的"9 点"指的是 UTC 的 9 点,而不是你本地的上午。安装 crontab 前先确认服务器时区;如果实现支持,也可以用 CRON_TZ 变量固定时区。在有夏令时的地区,最好避开凌晨那些会被跳过或重复的时段。
- 如何在每月最后一天执行?
- 标准 5 字段语法没有"最后一天"的写法(L 属于 Quartz 等调度器的扩展语法)。常见的做法是安排在 28 日到 31 日每天运行,再让脚本判断明天是否为 1 日,例如用 GNU date 写成 [ "$(date -d tomorrow +\%d)" = "01" ](注意 crontab 中的 % 要转义成 \%)。改在每月 1 日运行并当作上个月的收尾处理,往往更简单。
- Cron 支持按秒执行吗?
- 不支持。标准 crontab 的最小单位是 1 分钟,没有秒字段。以秒开头的 6 字段表达式属于 Quartz 等特定库,写进普通 crontab 会报格式错误。如果需要每 30 秒执行一次,常见做法是把同一条命令登记两行,其中一行前面加上 sleep 30。