跳到主内容

Cron 表达式解析

开发者工具

五段表达式 → 可读描述 · 未来运行时间

答案速览

Cron 五段 = 分 时 日 月 周;*/n 每 n、a-b 区间、a,b 列表;日与周同写是"或"关系;`0 9 * * 1-5` = 工作日 9:00;注意服务器时区。

加载中

这个工具对你有帮助吗?

怎么用

  1. 输入五段表达式:分 时 日 月 周,如 `*/5 * * * *`。
  2. 读人话翻译:自动给出中文可读描述。
  3. 看未来执行时间:列出接下来 10 次触发时刻。
  4. 排错:字段非法会指出具体哪一段有问题。

核心要点

  • 五段顺序:分钟(0-59) 小时(0-23) 日(1-31) 月(1-12) 星期(0-7,0/7=周日)。
  • 四大符号:* 任意、*/n 每 n、a-b 区间、a,b 列表、a-b/n 步进。
  • 日与周是"或"关系:两者都指定时,任一满足即触发——这是最常踩的坑。
  • 时区陷阱:crontab 按服务器本地时区执行,容器环境注意 TZ 变量。

原理与公式

Cron 五段结构

```

┌ 分钟 (0-59) ┌ 小时 (0-23) ┌ 日 (1-31) ┌ 月 (1-12) └ 星期 (0-7)

*/5 * * * * → 每 5 分钟

0 9 * * 1-5 → 工作日 9:00

0 0 1 * * → 每月 1 日 0:00

30 3 * * 0 → 每周日 3:30

0 */2 * * * → 每 2 小时整点

```

特殊值:星期 0 和 7 都表示周日;月份可用 JAN-DEC,星期可用 SUN-SAT(部分实现)。

常见问题

*/5 和 0/5 有什么区别?
在分钟段效果相同(每 5 分钟)。严格说 */n 是"从最小值开始每 n",0/n 是"从 0 开始每 n"。在小时段 */2 = 0,2,4...,而 1/2 = 1,3,5...(从 1 开始),起点不同。
为什么我的任务在 UTC 时间执行?
crontab 使用系统本地时区。Docker 容器默认 UTC——要么设 TZ 环境变量(TZ=Asia/Shanghai),要么把表达式换算成 UTC(北京时间 −8 小时)。Kubernetes CronJob 从 v1.25 支持 .spec.timeZone 字段。
「0 0 1 * 1」是每月 1 号且周一执行吗?
不是!日与周同时指定时是"或"关系:每月 1 号触发,每个周一也触发——一个月执行 5-6 次。想要"每月第一个周一"需要用 `0 0 1-7 * 1`(1-7 号之间的周一)。
秒级定时怎么做?
标准 crontab 最小粒度是分钟。需要秒级:① systemd timer(OnCalendar 支持秒);② 应用层调度(node-cron 支持 6 段含秒);③ 每分钟跑 + 脚本内 sleep。
0 0 * * * 和 @daily 一样吗?
一样。@daily/@midnight 都是「0 0 * * *」的别名;还有 @hourly(0 * * * *)、@weekly(0 0 * * 0)、@monthly(0 0 1 * *)、@reboot(启动时)。注意 @reboot 在容器里语义有限。

相关工具

相关指南

来源与更新

按 POSIX crontab 五段规范解析(Vixie cron 语义);未来执行时间按浏览器本地时区计算,服务器部署请以目标时区核对。

最近更新

本页公式与内容经一键算团队复核,仅供学习参考,实际业务请以官方口径为准。

引用本页一键算. Cron 表达式解析[EB/OL]. https://www.yijiansuan.com/c/dev/cron

本工具提供的结果仅供参考,不构成任何专业建议,请以官方核算为准。