Cron 表达式解析
开发者工具五段表达式 → 可读描述 · 未来运行时间
答案速览
Cron 五段 = 分 时 日 月 周;*/n 每 n、a-b 区间、a,b 列表;日与周同写是"或"关系;`0 9 * * 1-5` = 工作日 9:00;注意服务器时区。
加载中
这个工具对你有帮助吗?
怎么用
- 输入五段表达式:分 时 日 月 周,如 `*/5 * * * *`。
- 读人话翻译:自动给出中文可读描述。
- 看未来执行时间:列出接下来 10 次触发时刻。
- 排错:字段非法会指出具体哪一段有问题。
核心要点
- 五段顺序:分钟(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
本工具提供的结果仅供参考,不构成任何专业建议,请以官方核算为准。