← 全部工具

数据不出浏览器

Cron 表达式在线解析

免费 cron expression explainer。解析标准五段式(分 时 日 月 周)表达式。

  • 分钟:0
  • 小时:9
  • 日:每一项
  • 月:每一项
  • 星期:1, 2, 3, 4, 5

采用常见 5 字段 Unix cron;不同系统(含秒字段)可能有差异。

读懂和写出 cron 表达式

五个字段,顺序是:分、时、日、月、周。有两个容易栽跟头的地方:五段表达式指的是「在那个时刻」而不是「每分钟」;而且当「日」和「周」都被限定时,两者是「或」的关系——0 0 1 * 1 会在每月 1 号和每周一都触发。

语法本身很小:*/5 表示步进,连字符表示范围,逗号表示列表,还可以用 MON 这样的名字。最容易误判的是步进:分钟字段里的 */5 是每 5 分钟,但「日」字段里的 */5 是 1 号、6 号、11 号……几乎从来不是想要的语义。

各家实现并不一致。有的支持第六段(秒),有的周字段从 0 开始、有的从 1 开始,@daily 这类快捷写法也不是通用的。任务触发时间不对时,先查服务器时区,再看字段个数。

常见问题

五段分别是什么?
分钟、小时、日、月、星期(0=周日)。
支持 */5 吗?
支持 */n、a-b、逗号列表。
含秒的六段式呢?
本工具面向标准五段;可先去掉秒字段再解析。
怎么让任务每 5 分钟跑一次?
*/5 * * * * 就是每 5 分钟。如果感觉跑得比这更频繁,通常是表达式多了一段被服务端当成秒来读,或者外层包装在重试失败任务,每次重试看起来都像一次独立执行。
为什么 cron 任务在错误的时间执行?
几乎总是时区问题。cron 用的是系统时区,不是写表达式那个人的时区,也不一定是 UTC;夏令时切换后,本来想 09:00 本地执行的任务可能偏出一小时甚至更多。时间点重要时,请显式固定时区。
* 和 */1 有什么区别?
对这个字段来说,两者描述同一套时间:都表示取所有值。用 * 表达「每一」更清晰,把步进形式留给大于 1 的值,表达式更容易评审——因为多余的一处步进,正是任务触发频率远低于预期的常见原因。

相关工具