Crontab 生成器

Web 工具

可视化构建定时任务表达式并预览未来执行时间与自然语言含义,支持步长与范围语法,用于 crontab 与 CronJob 排错。支持标准五字段与含秒或年份的六、七字段写法,覆盖步长、范围与列表语法。会列出接下来若干次执行时间与自然语言解释,便于确认是否写错。支持常用宏写法与预设。表达式可复制到 crontab。

有效 · 字段
解析
M分钟
*/5
每 5 个分钟
H小时
9-17
小时 范围 9-17
D日
*
每个日
m月
*
每个月
W星期
1-5
星期 范围 1-5
⟶ 每 5 个分钟 · 小时 范围 9-17 · 每个日 · 每个月 · 星期 范围 1-5
示例 · 点击载入

关于 Crontab 生成器

定时任务不按预期执行时,问题往往出在表达式本身而不是任务代码:五个字段各代表什么、区间与步长如何组合、哪些写法在不同实现里含义不同,光看文本很难判断。解析工具把表达式翻译成人话,并列出接下来几次的执行时刻,从而把「我以为它是每小时」变成可验证的事实。 表达式的五个字段依次是分钟、小时、日、月、星期,每个字段既可以是具体值,也可以是区间、列表或步长。最容易出问题的是「日」与「星期」同时被限定时两者的关系:不同实现对其组合方式的处理并不一致,有的取并集有的取交集,跨系统移植任务时应避免同时限定这两个字段,改用单一条件配合脚本内的判断。 使用要点:解析后务必核对「接下来几次的执行时刻」,而不是只看文字描述,因为夏令时切换、月末与闰年这些边界只有在具体时刻列表里才看得出来。时区是另一处高频陷阱——表达式本身不带时区,由执行环境决定,容器基础镜像通常使用 UTC,于是本机测试通过的任务在线上会整体偏移数小时;部署时应显式设定执行时区。 边界与限制:不同实现支持的扩展语法不同,秒级字段、以及一些特殊字符串并非通用;把这些写法用在只支持标准五字段的系统上会直接报错或被忽略。此外没有年份字段意味着「每年执行一次」这类需求必须靠日与月组合表达,跨年边界判断容易出错。还有一点值得强调:表达式无法表达「跳过节假日」或「上一次未完成则不启动」这类业务语义,这些应放在任务的调度策略里而不是塞进表达式。 数据与隐私:定时任务表达式本身不敏感,但它常与内部系统名、批处理作业名一起出现,间接暴露系统结构。本工具在浏览器内完成解析与推算,不上传输入,也不需要联网即可使用。

落地建议是把「表达式 + 执行时区 + 下次执行时刻」这三项一起写进任务文档并纳入评审,而不是只留一行表达式。变更定时任务时先在预发环境跑一次,观察真实的触发时刻是否符合预期,尤其是跨夏令时切换与月末的那一周。对关键任务还应配置漏执行告警:表达式正确并不等于任务真的执行成功,两者之间还有依赖、资源与并发这些环节,缺少告警的定时任务是典型的静默故障源。

上手时把表达式贴进来,先看文字描述是否符合你的意图,再核对接下来几次的执行时刻——这两步能挡掉绝大多数写错的情况。维护上,建议在任务清单里同时记录表达式、时区与责任人,并在每次调整后重新生成执行时刻对照表,便于评审时快速确认;对于跨时区团队,还要明确「表达式按谁的时间解释」,否则同一个表达式在不同成员眼里含义不同,讨论时会各说各话。

实现原理

五个字段依次是分钟、小时、日、月、星期,每个字段可写具体值、区间、列表或步长。表达式本身**不带时区**,由执行环境决定,容器基础镜像通常使用 UTC,因此本机通过的任务在线上可能整体偏移数小时。日与星期同时被限定时,不同实现对二者组合的处理并不一致。

常见表达式解读
输入0 3 * * 1-5
输出周一至周五 03:00 执行(按执行环境时区解释,非 UTC 环境需换算)

使用方法

  1. 打开「Crontab 生成器」
  2. 输入或粘贴待处理的内容
  3. 根据需要调整输出选项
  4. 点击「运行」按钮,结果实时显示
  5. 复制或导出结果

使用场景

  • 调试 K8s CronJob — 部署前先在本工具验证 schedule 字段,避免任务跑错时间。
  • GitLab CI / GitHub Actions — 配置定时 pipeline 时核对 cron 表达式的实际执行时刻。
  • 编写后端定时任务 — Spring @Scheduled、Node node-cron、Python APScheduler 都用类似语法。
  • 运维脚本调度 — /etc/crontab、systemd timers 之前先在工具里验证表达式。
  • 学习 cron 语法 — 边改边看下次执行时间,比死记 * / , - 含义快得多。

常见问题

5 字段和 6 字段 cron 有什么区别?

5 字段是经典 Unix cron(分时日月周),最小粒度分钟。6 字段在前面加了"秒",是 Quartz/Spring 的扩展。本工具自动识别。

* * * * * 表示什么?

每分钟执行一次。第一个 * 是分(0-59 任意),第二个 * 是时(0-23 任意),依此类推。

0 */2 * * * 是每两小时?

是。0 表示第 0 分钟,*/2 表示每隔 2 小时(0、2、4.22 点的整点执行)。

日和周字段冲突时怎么办?

经典 cron 是"或"关系——同时设置时任意一个匹配就执行。Quartz 必须有一个填 。这是初学者最容易踩的坑。

能精确到秒吗?

经典 5 字段 cron 不行,最小粒度是分钟。需要按秒触发请用 6 字段(Quartz)方言,或用 setInterval / 消息队列。

表达式看起来没问题,任务却没在预期时间执行?

先确认执行环境的时区:表达式本身不带时区,容器基础镜像通常使用 UTC,于是本机测试通过的任务在线上可能整体偏移数小时。其次确认日与星期是否被同时限定,不同实现对这两者组合的处理并不一致。最后检查是否处于夏令时切换的那一周,切换日部分本地时刻根本不存在,基于本地时间的调度会在那天表现异常。

为什么推算出来的下次执行时刻和实际日志对不上?

解析器只按表达式推算时刻,不反映排队延迟、依赖未就绪、以及上一次任务尚未结束导致本次被跳过等情况。若长期对不上,应查看调度器的并发策略与错过执行的补偿规则,而不是继续修改表达式。把表达式、执行时区与调度策略三项一并记录在任务文档里,能显著缩短这类排查。

表达式在这里能解析,但服务器上不执行?

最大嫌疑是 cron 实现差异:标准 cron 不支持 @reboot、秒级字段(那是 Quartz),Debian 与 vixie-cron 对 7(周日)的处理也不同。确认目标机器用的是哪个实现,再核对表达式语法——解析通过只说明语法对,不代表语义被支持。

广告