跳到正文

生成并解读 Cron 表达式

在浏览器中可视化生成 cron 计划,用通俗中文解读,并预览任意时区的后续运行时间,支持标准、Quartz 和 AWS 语法。

通俗说明

At 09:30, on Monday through Friday

预设

可视化构建

接下来 10 次运行

计算中……

被夏令时切换跳过的时间不会运行;重复的小时只运行一次。实际的 cron 守护进程在这方面略有差异。

速查表 — 标准
字段允许的值
分钟0–59
小时0–23
日期1–31
月份1–12 或 JAN–DEC
星期0–7 (0 和 7 = 星期日)或 SUN–SAT
符号含义
*任意值
,列表:1,15 = 1 日和 15 日
-范围:1-5 = 1 到 5
/步长:*/15 = 每 15;5/15 = 5、20、35、50
@daily宏:@yearly @monthly @weekly @daily @hourly(以及 @reboot)

当日期和星期都有限制时,标准 cron 会在符合其中任意一个条件的日子运行。

在浏览器中运行 · 无需上传工作原理

Cron 表达式生成器 使用方法

  1. 1

    选择语法

    选择标准 cron、带秒的 cron、Quartz 或 AWS EventBridge,也可以直接粘贴,由字段数量自动判断。

  2. 2

    输入或构建计划

    直接输入表达式,从预设开始,或用可视化编辑器设置各个字段。

  3. 3

    查看说明

    对照通俗说明和高亮的字段,确认表达式的含义与你的本意一致。

  4. 4

    检查接下来的运行时间

    选择时区,确认接下来 10 次运行时间,然后复制表达式。

限制与 Pro

免费使用,无需注册:4 种语法、12 个预设,可在 400 多个时区中查看接下来 10 次运行时间,最多向后查找 30 年(或到表达式指定的最后一年)。

Pro 可去除广告;构建器的功能在所有套餐中都一样。 了解 Pro

关于 Cron 表达式生成器

Cron 表达式把一个执行计划压缩成几个用空格分隔的字段,只要有一个数字放错位置,“每个工作日 9 点”就可能变成“9 点这一小时里的每一分钟”。这个构建器可以让你直接输入或粘贴表达式,立即用通俗的中文说明它的含义,并标出每个字段,同时列出接下来 10 次触发的时间。

工具支持四种语法,因为它们确实各不相同。标准 cron 有五个字段:分钟、小时、日期、月份和星期,crontab、Linux cron 守护进程、Kubernetes CronJob 和 GitHub Actions 都使用这种写法,也支持 @daily 之类的宏。带秒的语法在最前面多一个秒字段,node-cron 和 croner 就是这样。Quartz 使用六个或七个字段,包含秒和可选的年份,星期日记为 1,日期和星期两个字段中必须有一个写 ?,还增加了表示“最后一个”的 L、“最近的工作日”的 W 和“第三个星期五”这类写法的 #。AWS EventBridge 有六个字段,最后一个是年份,日期规则与 Quartz 相同,写法为 cron(…)。粘贴表达式时,如果字段数量足以判断语法,会自动切换;切换语法时,也会尽可能转换你已有的内容。

可视化编辑器用“每”、每 N、指定值和范围几种控件设置各个字段,预设则涵盖常见任务。运行时间可按任意 IANA 时区计算,并处理夏令时造成的时间缺口;EventBridge 规则按 AWS 的计算方式默认使用 UTC。

构建器只检查语法和时间:它不知道你服务器上的时钟,也不知道机器关机期间错过的运行,更不了解调度器自身的限制,例如 GitHub 的最短间隔。

隐私

表达式的解析和运行时间的计算都由本页面中的代码完成,使用的是浏览器自带的时区数据,不会向服务器发送任何内容。你选择的语法和时区会保存在本地存储中,供下次访问时使用。

功能

通俗易懂的说明

看到的是“周一至周五的 09:30”,不用再猜 30 9 * * 1-5 是什么意思。

任意时区的接下来 10 次运行

可按 UTC 或任意 IANA 时区显示运行时间,并处理夏令时变化。

支持 Quartz 和 AWS 语法

为支持的调度器提供秒、年份以及 ?、L、W 和 # 的写法。

Cron 表达式生成器:常见问题

为什么任务运行的天数比我预想的多?
在标准 cron 中,如果日期和星期两个字段都做了限制,只要满足其中一个,任务就会运行。所以 0 9 13 * 5 会在每个 13 号运行,也会在每个星期五运行,而不只是 13 号的星期五。这里的说明会明确指出这一点。Quartz 和 AWS 要求其中一个字段写 ?,以避免这种歧义。
cron 表达式中的 */15 是什么意思?
斜杠表示步长:分钟字段中的 */15 表示从 0 开始每 15 分钟一次,也就是 :00、:15、:30 和 :45。加上起始值会整体偏移:5/15 在 :05、:20、:35 和 :50 运行。与范围结合时,小时字段中的 9-17/2 表示 9 点到 17 点之间每隔两小时一次。
cron 使用哪个时区?
传统 cron 守护进程使用服务器的本地时区,除非 crontab 中设置了 CRON_TZ 或 TZ。Kubernetes CronJob 默认使用控制器所在的时区,但支持 timeZone 字段;GitHub Actions 的计划任务按 UTC 运行;EventBridge 规则始终使用 UTC,而 EventBridge Scheduler 可以选择时区。在这里选择对应的时区,即可预览真实的运行时间。
遇到夏令时切换会怎样?
时钟拨快时,被跳过的那一小时的本地时间并不存在;拨回时,某一小时会出现两次。这里的预览会跳过不存在的时间,重复的时间只算一次。实际的守护进程各不相同:Vixie cron 和 cronie 会尝试补运行被跳过的任务,所以对于本地时间 01:00–03:00 的任务,建议使用 UTC,或查阅调度器的文档。
如何把 crontab 的一行转换成 Quartz 或 AWS 格式?
从列表中选择新的语法,表达式就会被转换:Quartz 会加上秒字段,AWS 会加上年份字段,星期数字从 0–6 改为 1–7,并在未使用的日期字段中填入 ?。如果原表达式同时设置了日期和星期,会提示目标语法无法表达这种组合。