Cron 表达式生成器

按分、时、日、月、周五个字段编辑 cron 表达式,实时给出中英文解释与接下来 5 次执行时间。字段范围即时校验,全程本地运行。

5 个字段依次为分、时、日、月、周,用空格分隔。这里改动会同步到下方各字段输入框。

常用预设

点击预设即填入表达式框。

逗号列表、连字符区间与斜杠步进均可使用。

常用步进如 */2、*/6,区间可回绕,例如 22-2。

? 表示不限制,与 * 等价。

可用英文缩写 JAN 到 DEC。

0 与 7 都表示周日,MON-FRI 等价 1-5。

使用说明

  1. 在「Cron 表达式」框输入完整表达式,5 个字段依次为分、时、日、月、周,用空格分隔,结果区随输入实时刷新。
  2. 也可以在下方五个字段输入框里逐项编辑,字段旁的快捷按钮可一键填入星号、步进或区间写法。
  3. 不确定从何下手时点「常用预设」,先填入每分钟、工作日 09:00 之类的典型计划,再做微调。
  4. 结果区给出表达式、中英文描述与接下来 5 次执行时间,三者由同一套解析器驱动,含义始终一致。
  5. 字段写错时页面上方会标出具体字段与原因,例如分钟 61 超出范围 0 到 59。

常见问题

「日」和「周」同时指定时,为什么两个条件都会触发执行?
标准 cron 在两个字段都受限时按并集处理:月中日或周日任一命中就执行,与 Linux crontab 行为一致。想表达两者同时满足,需要在脚本里再判断一次日期。页面检测到这种写法时会显示提示。
周字段里的 0 和 7 都表示周日吗?
是。0 与 7 等价,SUN 同样表示周日,1 到 6 依次是周一到周六。MON-FRI 与 1-5 等价,名称与数字走同一条解析路径。
为什么有时列不出「接下来 5 次」执行时间?
推算从当前时间的下一分钟开始,最多向后搜索 1 年。如果组合命不中任何时间,例如 2 月 30 日,列表会明确提示一年内没有执行时间,而不是静默留空。
输入的表达式会上传到服务器吗?
不会。字段解析、描述生成与执行时间推算全部在浏览器本地完成,表达式不会离开当前设备。

使用步骤

  1. 输入或选择表达式

    在表达式框直接输入 5 段写法,或点常用预设一键填入典型计划。改动后结果区立刻刷新,表达式框与各字段输入框双向同步。

  2. 逐字段微调

    下方五个输入框对应分、时、日、月、周,每个字段旁的快捷按钮可填入星号、步进或区间。字段写错时会提示具体字段与原因。

  3. 查看人话解释

    结果区给出中英文描述,例如「每周一至周五 08:30」。描述与执行时间由同一套解析器计算,两边不会互相矛盾。

  4. 核对执行时间

    页面从当前时间的下一分钟开始搜索,列出接下来 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 日永远不成立。逐分钟扫描与真实调度器的最小粒度一致,月份天数不同、闰年更替等情况都能保持正确,无需按月单独计算。

典型使用场景

  1. 配置定时任务

    把 crontab 里看不懂的一行表达式粘进来,先读人话描述确认含义。再核对接下来 5 次执行时间是否落在预期时段,避免把清理脚本排到错误的时间点上,减少返工。

  2. 改写现有计划

    需求从每天执行改成工作日执行时,保持分钟与小时字段不变,把周字段改成 1-5 即可。描述与执行时间列表同步刷新,改动效果一眼可见,不必再到服务器上试错。

  3. 排查未触发问题

    任务没有按时运行时,先检查各字段范围是否写错,再看执行时间列表是否为空。像 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 天时,结果列表会为空,这不是工具出错,而是表达式本身命不中任何日期,请调整日与月的组合。

相关工具