Cron 表达式生成器

编写和读懂 crontab 计划。输入一条 cron 表达式,就能用白话看到它何时运行、接下来几次的运行时刻,以及五个字段各自的含义。

分钟
小时
星期

每分钟。

接下来的运行


  •  
  •  
  •  
  •  
  •  

时间按你电脑所在的时区()显示。cron 用的是服务器的时区,两者往往不同。

常用计划


选一条即可填入上面的输入框。

* * * * *每分钟
*/5 * * * *每 5 分钟
*/15 * * * *每 15 分钟
*/30 * * * *每半小时
0 * * * *每小时
0 */2 * * *每 2 小时
0 */6 * * *每 6 小时
0 */12 * * *每天两次
0 0 * * *每天午夜
0 9 * * *每天上午 9 点
0 9 * * 1-5工作日上午 9 点
0 9 * * 6,0周六和周日 9 点
0 0 * * 1每周一午夜
0 18 * * 5每周五下午 6 点
0 0 1 * *每月第一天
0 0 1 1 *每年第一天

每个字段的含义


字段可用取值
分钟0 – 59
小时0 – 23
1 – 31
1 – 12, JAN – DEC
星期0 – 6, SUN – SAT (0 = 7)

特殊符号


符号含义
*任意值
,分隔列表中的取值
-一段取值范围
/范围内的步长

简写


@yearly, @annually0 0 1 1 *
@monthly0 0 1 * *
@weekly0 0 * * 0
@daily, @midnight0 0 * * *
@hourly0 * * * *
@reboot

它们不属于 POSIX 的 cron,但几乎所有实现都接受。

最容易踩的坑


  • 当“日”和“星期”都被限定时,cron 会在符合其中任意一个的日子运行,而不是两个都符合。“* * 3 * 1”在每月 3 日和每个周一都会运行。例外是其中一个以星号开头:“* * */2 * 1”只在既是单数日又是周一的那天运行。手册页在这一点上写错了。
  • 把服务器连同 cron 一起跑在 UTC 上。写在有夏令时的时区里的计划,每年会漏掉一次运行,并在下一次切换时重复一次。
  • 标准 cron 没有秒和年的字段。如果你需要那种精度,cron 就不是合适的工具。
  • 避开 @reboot。它取决于机器是如何重启的、那一刻哪些服务已经就绪,因此很难推断。
  • 五个字段装不下的计划,可以拆成两条。想每 90 分钟运行一次,就把“0 */3 * * *”和“30 1/3 * * *”并排写上。
  • 命令要写绝对路径。cron 的 PATH 非常短,而且几乎没有你的 shell 里那些环境变量。

Cron 表达式常见问题


五个字段分别是什么?
依次是:分钟、小时、日、月、星期。带星号的字段匹配任意取值。

星期日是 0 还是 7?
都可以。多数实现的星期日既接受 0 也接受 7,也接受 SUN 到 SAT 的三字母写法。

我的任务为什么没在预期的时间运行?
常见原因是服务器在另一个时区、上面讲的“日”与“星期”规则,或者因为 cron 不加载你的 shell 配置而导致命令失败。

这个页面会把我的表达式发到别处吗?
不会。表达式的解析和运行时刻的计算都在你的浏览器里完成,不会上传任何内容。

Wikipedia — Cron
Wikipedia — Crontab
Wikipedia — Daemon