跳到正文

cron 表达式解读

Cron Parser

用大白话解释一条 cron 表达式,并按选定时区列出接下来几次执行的时刻。

读一条 cron 表达式,用大白话说出它什么时候运行,然后按你选的时区列出接下来几次执行。五个字段或带秒的六个字段,加上 `@daily` 之类、表示最后一天的 `L` 和表示第三个星期五的 `5#3`。

🔒 完全在你的浏览器里运行cronscheduleparse

表达式

五个字段,或者在最前面加上秒的六个字段。`@daily`、`@hourly` 之类也能用。

用大白话说

星期一到星期五 9点到17点里每15分钟执行。

逐字段查看

cron 的每个字段一行。
字段值含义
分0-59每15分钟`*/15` 是每一刻钟,`15` 是每小时的第 15 分。
时0-239点到17点一律 24 小时制,除非调度器另有规定,一律用服务器的时区。
日1-31每天`L` 是最后一天。写 31 的话,短的月份就直接不触发。
月1-12 或 JAN-DEC每月名称不区分大小写。
星期0-7 或 SUN-SAT星期一到星期五0 和 7 都是星期日。`5#3` 是第三个星期五,`5L` 是最后一个。

接下来的执行

数量
这个计划在今后五年里一次也不会执行。2 月 30 日这样的日期永远不会到来。

时区

UTC

按上面选的时区计算,而不是按浏览器的。夏令时跳过的钟面时间,这里也跳过。

怎么用

  1. 粘贴表达式

    它会被描述成一句话,每个字段单独列出,带它的取值范围和你的值对它意味着什么。

  2. 设置时区

    这是检查一条 cron 的全部意义。你的调度器在服务器的时区里运行,通常是 UTC,很少是你的——接下来几次执行的列表按你选的时区计算,不是你浏览器的。

  3. 读接下来几次执行

    带星期几和每两次之间的间隔。你预期隔一天却看到两次执行只隔一小时,是发现某个字段放错位置最快的办法。

常见问题

为什么 `0 0 * * 1` 不在 1 号运行?

因为第五个字段是星期几,不是几号——`1` 是星期一。几号是第三个字段。第五个字段里 `0` 和 `7` 都表示星期日。

夏令时切换时任务会怎样?

时钟跳过的那个墙上时间不会发生,这个列表也跳过它。重复出现的时间可能触发两次,取决于调度器。这就是在有夏令时的时区里 `0 2 * * *` 是一个糟糕时点的原因。

几号和星期几是「与」还是「或」的关系?

两者都受限制时是「或」——Vixie cron 的一个怪癖,熬过了每一次修正它的尝试。`0 0 1 * 1` 在每月 1 号*和*每个星期一都触发,而不是在恰好是 1 号的星期一。适用时这里的描述会把这一点写明。

每个调度器都支持 `L` 和 `#` 吗?

不。它们是 Quartz 的扩展,Quartz、Spring 和几个云调度器支持,普通的 Unix cron 没有。秒字段也是同样的情况。依赖任何一个之前先查你的调度器。

可以从这些接进来

接下来

这些工具吃得下当前工具的产出,结果可以直接送过去。