Cron 表达式生成器
转换拼装、校验并解析 cron 表达式,计算下次触发时间(UTC)。
- 下次运行 (UTC)
- —
- 复制
- —
本页内容
什么是 cron 表达式?#
cron 表达式是一种紧凑的定时计划,写成五个空格分隔的字段:分 时 日 月 周。一行 0 9 * * 1-5 从左往右读就是”第 0 分、第 9 时、每一天、每一月、周一到周五(1-5)“——即工作日 09:00。每个 * 表示”该字段的所有值”,所以你钉死的字段越多,计划越具体;留下的 * 越多,触发越频繁。
cron 是 Linux crontab、GitHub Actions、Kubernetes CronJob、绝大多数 CI 系统以及无数任务调度器的原生调度语言。写对它只是一半战场,另一半是日 / 周的搭配陷阱(见下方 FAQ),连老手都会栽在这里。本页在你输入时实时解析这五个字段,标出有语法或范围错误的那个具体字段,并算出下次触发,让你确认计划确实在你以为的时间点跑。
怎么用#
- 顶部 Expression 输入框可直接编辑,默认是
* * * * *(每分钟)。 - 下方有五个下拉框,对应五个字段(分、时、日、月、周)。每个下拉给出该字段常用的片段(
*、*/5、0、1-5、0,6……),选中后会把片段填入表达式对应位置——当你记不清*/15该放在分字段还是时字段时很方便。 - 预设 行一键填入完整的起步计划:每分钟、每小时、每天、每周、每月、每年、工作日。
- 输出面板显示 Next run(当前时刻及之后第一个匹配的瞬间)和一行状态——解析成功则确认,否则点名出错的字段。点 now() 用当前时刻重新计算。
核心特性#
- 完整的五字段语法。 支持
*、逗号列表(0,15,30,45)、范围(1-5)、步进(*/15、9-17/2),以及月/周的名称(JAN-DEC、SUN-SAT,大小写不敏感)。7也被接受表示周日,并归一化为0。 - 正确的日/周逻辑。 实现标准 Vixie cron 规则:当两个字段都被限定时,任一匹配即触发(逻辑或);只限定其中一个时,则两者都需匹配(与)。很多简陋的计算器在这里搞错。
- 精确到字段的报错。 范围越界或写错字母时,会指出具体是哪个字段(分、时……)出了问题,而不是笼统的”表达式非法”。
- 基于 UTC 的下次触发。 触发计算在瞬间的 UTC 分量上进行,所以无论在哪儿打开页面结果都确定,再以普通日期形式渲染出来供复制。
- 不可达保护。 一个永远无法匹配的表达式(比如某个月根本不存在的日)会被识别出来,而不是死循环。
实例演示#
输入 0 9 * * 1-5 作为工作日站会。逐字段读:分 0、时 9、日 *、月 *、周 1-5。日字段是 *、周字段是 1-5,但只有周被限定、日是通配——走”与”路径:在周一到周五的 09:00 触发。Next run 会显示下一个即将到来的工作日 09:00 UTC 瞬间。
对比一下 0 0 1 * 1——“0 分、0 时、每月 1 号、每月、周一”。这里日(1)和周(1)都被限定,于是 cron 走”或”路径:任务在每月 1 号以及每个周一都触发——而不是几乎所有人误解的”只有 1 号恰好是周一才触发”。Next run 面板把这种差别直接摆到眼前:你会看到它跳到最近的某个周一,哪怕那天根本不是 1 号。
常见问题#
为什么我的任务在没料到的日子也触发了?#
几乎总是日/周的搭配问题。标准 cron 在两者都被钉死时按”或”处理:0 0 1 * 1 表示”每月 1 号,或任意周一”,不是”1 号且是周一”。如果你想要”只有 1 号恰好是周一才跑”,cron 本身表达不了——正确做法是按 1 号排程,再在脚本里加一个工作日判断。
*/5 和 9-17/2 是什么意思?#
分字段里的 */5 表示”从 0 开始,每 5 个值取一次” → 0, 5, 10, 15, …, 55。9-17/2 表示”在 9 到 17 这个范围内,每 2 个值取一次” → 9, 11, 13, 15, 17——适合”上班时间每两小时跑一次”。/ 后面的步进除数作用于它前面的那个范围或通配符。
0 和 7 哪个是周日?#
都是。周字段接受 0 和 7 表示周日(cron 历史上用 0,有些系统补了 7)。本工具两者都收,并把 7 归一化成 0。名称也行:SUN、Mon、fri 大小写都识别。
表达式能解析,但 Next run 看着很远,是算错了吗?#
大概率没算错,通常只是计划本身就近触发不了。0 0 29 2 *(2 月 29 日)合法,但只有闰年才匹配,下次触发可能隔好几年。工具把搜索上限设在大约八年;八年窗口内仍无法匹配的表达式会被报告为不可达,而不会卡住页面。