Cron表达式解析器与下次执行时间计算

解析cron表达式(分 时 日 月 星期),用通俗语言展示调度规则,支持步长、范围、逗号列表等语法,并自动计算接下来5次执行时间。适合查看crontab或GitHub Actions的定时任务设置。

Cron表达式语法(5个字段)

cron表达式从左到右由5个用空格分隔的字段组成:分钟、小时、日期、月份、星期。每个字段可使用以下特殊字符。

位置 字段 允许范围
1 分钟 0-59
2 小时 0-23
3 日期(几号) 1-31
4 月份 1-12
5 星期 0-7

星期字段通常0=星期日、6=星期六,但本工具也接受部分cron实现使用的7作为星期日的别名(内部按0处理)。

每个字段都可以使用"*"(任意值)、逗号分隔的列表(1,15,30)、连字符范围(1-5)以及斜杠步长(*/15、1-30/5),并且这些语法可以自由组合。

常见的cron模式

cron表达式 含义
* * * * * 每分钟执行一次。
*/5 * * * * 每5分钟执行一次。
0 * * * * 每小时的第0分钟执行一次。
0 0 * * * 每天0点0分(凌晨)执行。
0 9 * * 1-5 工作日(周一至周五)的9点执行。
0 0 1 * * 每月1号0点0分执行。
0 0 1 1 * 每年1月1日0点0分执行。
*/15 9-17 * * 1-5 工作日9点到17点之间,每15分钟执行一次。

使用小贴士

  • 像"*/15 9-17 * * 1-5"这样,逗号列表、连字符范围与斜杠步长可以自由组合使用。
  • 星期字段通常是0-6(星期日至星期六),但本工具也接受部分cron实现使用的7作为星期日的别名。
  • 如果日期字段和星期字段都被限制为非"*",按照标准cron规范,两者是"或"的关系——只要满足其中一个条件就会执行。
  • GitHub Actions的schedule触发器使用与本工具相同的5字段cron语法,因此也可以用来确认工作流的执行时间。
  • 实际执行时间会受服务器时区设置影响,修改crontab后,建议同时确认一下服务器的当前时间。

常见问题

是的。标准cron规范用0表示星期日,但部分实现(如Vixie cron)也接受7作为星期日的另一种写法。本工具会将两者都解释为星期日。

不是优先关系,而是"或"条件。当日期字段和星期字段都被限制为非"*"时,只要满足其中一个条件的日子就会执行;如果只有一个字段被限制,则只以该字段为准。

基本的5字段格式(分 时 日 月 星期)是相同的。但GitHub Actions的定时任务始终按协调世界时(UTC)计算,并且实际执行可能会延迟几分钟到几十分钟,这与服务器上的crontab有所不同。

可以,分、时、日、月、星期这5个字段都可以使用步长语法(起始值/间隔,或*/间隔)。不过对于星期、月份这类取值范围较小的字段,实际能组合出的模式比较有限。
ツールくん

闲话 ― cron的半个世纪

cron这个名字据说源自希腊语中意为"时间"的Chronos(克罗诺斯),自20世纪70年代UNIX诞生之初就作为经典的任务调度工具存在。仅用5个字段就能表达从"每分钟"到"每年某个特定日期"的调度规则,这种简洁的语法即便在近半个世纪后的今天依然被广泛使用。

如今,这种5字段的cron语法不仅用于Linux服务器的crontab,也被GitHub Actions、GitLab CI、Kubernetes的CronJob等众多CI/CD工具和容器平台直接采用为定时任务的配置方式。一种诞生于UNIX时代的语法,至今仍在云原生环境中原封不动地被使用,这本身就是一件有趣的事。

cron语法中最容易让人困惑的一点,就是同时指定日期和星期时的行为。人们往往直觉认为这是"且"的关系(同时满足两者),但实际规范却是"或"的关系(满足其中之一即可),这也是任务执行频率与预期不符的常见原因之一。

→ 查看全部趣味知识