跳到正文
OpsKit

Cron 表达式解析器

粘贴 cron 表达式,看它究竟什么时候执行。每个字段都会被拆开说明,执行时间按调度器所用的时区计算——绝大多数 cron 事故正是从这里开始的。

常用计划

下次执行时间

字段拆解

字段匹配
00
99
*所有值
*所有值
星期1-5一, 二, 三, 四, 五

全部在浏览器内完成. 这个页面是静态文件。你输入的内容只留在标签页里,不会发送到服务器,关闭即消失。所以粘贴真实的令牌或配置是安全的。

什么时候用得上

  • 写 Kubernetes CronJob,需要确认它在北京时间 9 点而不是 UTC 9 点执行。
  • 接手了一份 crontab,没人记得 30 2 * * 0 是什么意思。
  • 确认批处理任务和备份窗口下个月不会撞在一起。

实际示例

工作日 09:00

输入
0 9 * * 1-5
结果
周一至周五 09:00

星期取值 0–6,周日为 0。0 和 7 都表示周日。

工作时间内每 15 分钟

输入
*/15 9-18 * * 1-5
结果
工作日 09:00、09:15 … 18:45

步长只在指定范围内生效,所以到 18:45 就停,不会整夜运行。

最容易被误解的写法

输入
0 0 1 * MON
结果
每月 1 号,以及每个周一

两个日期字段都限定时,cron 取的是并集而不是交集。

容易出错的地方

以为容器用的是你的时区

没有设置 timeZone 的 Kubernetes CronJob 使用控制器的时区,通常是 UTC。写成 09:00 就会在北京时间 17:00 执行。

把小时字段的 `*/5` 读成每五小时一次

步长是从 0 开始对整个范围取值,小时字段的 */5 表示 0、5、10、15、20 点,而不是从现在起每五小时。

同时限定日和星期

两个都收紧只会让执行更频繁,而不是更少。除非你确实想要并集,否则请把其中一个留成 *

常见问题

cron 表达式应该有几个字段?

标准 Unix cron 和 Kubernetes CronJob 是 5 个:分、时、日、月、星期。AWS EventBridge 多一个年份字段共 6 个,并要求两个日期字段中有一个写 ?。Quartz 在最前面加了秒,共 6 或 7 个。

为什么我的 Kubernetes CronJob 在错误的时间执行?

除非设置 spec.timeZone,否则计划会按 kube-controller-manager 的时区解释,通常是 UTC。请显式设置,或者直接按 UTC 编写并在文档中写明。

@daily 是什么意思?

它是 0 0 * * * 的简写,即每天零点。其他简写还有 @hourly、@weekly、@monthly 和 @yearly。@reboot 不同,它在启动时执行,没有固定时刻。

相关工具