Cron 表达式生成器
按分、时、日、月、周五个字段编辑 cron 表达式,实时给出中英文解释与接下来 5 次执行时间。字段范围即时校验,全程本地运行。
使用说明
- 在「Cron 表达式」框输入完整表达式,5 个字段依次为分、时、日、月、周,用空格分隔,结果区随输入实时刷新。
- 也可以在下方五个字段输入框里逐项编辑,字段旁的快捷按钮可一键填入星号、步进或区间写法。
- 不确定从何下手时点「常用预设」,先填入每分钟、工作日 09:00 之类的典型计划,再做微调。
- 结果区给出表达式、中英文描述与接下来 5 次执行时间,三者由同一套解析器驱动,含义始终一致。
- 字段写错时页面上方会标出具体字段与原因,例如分钟 61 超出范围 0 到 59。
常见问题
「日」和「周」同时指定时,为什么两个条件都会触发执行?
周字段里的 0 和 7 都表示周日吗?
为什么有时列不出「接下来 5 次」执行时间?
输入的表达式会上传到服务器吗?
使用步骤
- 输入或选择表达式
在表达式框直接输入 5 段写法,或点常用预设一键填入典型计划。改动后结果区立刻刷新,表达式框与各字段输入框双向同步。
- 逐字段微调
下方五个输入框对应分、时、日、月、周,每个字段旁的快捷按钮可填入星号、步进或区间。字段写错时会提示具体字段与原因。
- 查看人话解释
结果区给出中英文描述,例如「每周一至周五 08:30」。描述与执行时间由同一套解析器计算,两边不会互相矛盾。
- 核对执行时间
页面从当前时间的下一分钟开始搜索,列出接下来 5 次执行的本地时间。「日」与「周」同时受限时会提示按并集执行。
工具详细介绍
cron 表达式用五个字段描述周期任务的时间规则,从左到右依次是分钟、小时、日期、月份和星期。每个字段可以写星号表示任意值,写数字表示具体取值,用逗号连接多个值,用连字符表达区间,再用斜杠附加步进。例如 30 8 * * 1-5 表示周一到周五每天 08:30 执行一次,0 0 1 * * 表示每月 1 号零点执行一次。本工具把五个字段拆成独立输入框,配合预设与快捷按钮,从零编写表达式或读懂他人留下的计划都更省力。
解析、描述与执行时间推算共用同一套实现。工具先把五个字段解析成各自的取值集合,再据此生成中英文人话解释。执行时间从当前时间的下一分钟起逐分钟向后匹配,最多推算一年,凑满五次即停。日与周同时受限时按标准 cron 语义取并集,月中日或周日任一命中就执行。这与 Linux crontab 的行为一致,页面检测到这种写法时会给出提示。全部计算在浏览器本地完成,输入内容不会上传服务器。
原理与背景
标准 cron 的五个字段各有取值范围:分钟 0 到 59,小时 0 到 23,日期 1 到 31,月份 1 到 12,星期 0 到 7 且 0 与 7 都代表周日。解析器先按逗号把字段拆成多个子项,每个子项再识别星号、区间和步进,最后合并成该字段允许取值的集合。区间支持回绕,小时写 22-2 表示 22、23、0、1、2 点连续覆盖。月份与星期可以用英文缩写,JAN 对应 1 月,MON 对应周一。某个字段的取值集合为空时,说明这组写法命不中任何时间,工具会直接报错而不是给出空结果。
执行时间推算采用逐分钟扫描:把当前时间舍入到整分并前进一分钟作为起点。每个候选时刻依次检查分钟、小时、月份是否落在对应集合里,日期再按月中日与周日的并集语义判断。找到五次命中即停止,扫满一年仍未凑满就提示一年内没有执行时间,例如 2 月 30 日永远不成立。逐分钟扫描与真实调度器的最小粒度一致,月份天数不同、闰年更替等情况都能保持正确,无需按月单独计算。
典型使用场景
- 配置定时任务
把 crontab 里看不懂的一行表达式粘进来,先读人话描述确认含义。再核对接下来 5 次执行时间是否落在预期时段,避免把清理脚本排到错误的时间点上,减少返工。
- 改写现有计划
需求从每天执行改成工作日执行时,保持分钟与小时字段不变,把周字段改成 1-5 即可。描述与执行时间列表同步刷新,改动效果一眼可见,不必再到服务器上试错。
- 排查未触发问题
任务没有按时运行时,先检查各字段范围是否写错,再看执行时间列表是否为空。像 2 月 30 日这类写法一年都不会命中,页面会明确提示,方便快速定位原因。
使用技巧
- 周字段里 0 与 7 都表示周日,SUN 同样可用;1 到 6 依次是周一到周六,MON-FRI 与 1-5 等价。
- 步进写在星号或区间后面,例如 */5 表示每 5 分钟一次,10-30/10 表示从第 10 分到第 30 分每 10 分钟一次。
- 确认表达式是否按预期触发时,先读描述文字,再对照接下来 5 次执行时间,两者一致才可放心上线。
注意事项
- 日与周不要叠加约束
两个字段同时受限时 cron 会按并集执行,写 0 0 1 * 1 表示每周一和每月 1 号都会运行。想限定 1 号且恰好是周一,需要在脚本里自行判断日期后决定是否执行,避免任务比预期跑得更频繁。
- 区间端点要留意回绕
小时写 22-2 表示从 22 点跨过零点绕到次日 2 点,覆盖五个小时。如果本意是升序区间或不想跨天,请改用逗号列表分开书写,避免阅读的人误解实际执行范围。
- 结果为空先查日与月
搜索范围是从当前时间起一年。日字段写 31 而月份不含 31 天时,结果列表会为空,这不是工具出错,而是表达式本身命不中任何日期,请调整日与月的组合。