标准 5 段:分 时 日 月 周,支持 * , - / 与 L(月末)。
生成的是标准 5 段 crontab 表达式,可直接用于 Linux crontab、Quartz(5 段模式)、各类定时任务平台。全程本地计算,不上传。
顺序固定为「分 时 日 月 周」,缺一不可。
| 字段 | 允许值 | 特殊符号 | 示例 |
|---|---|---|---|
| 分钟 | 0-59 | * , - / | */5 每 5 分钟;0 第 0 分 |
| 小时 | 0-23 | * , - / | 9-18 9 点到 18 点;0,12 0 点和 12 点 |
| 日 | 1-31 | * , - / L | 1 每月 1 号;L 月末 |
| 月 | 1-12 | * , - / | */3 每 3 个月;1,7 1 月和 7 月 |
| 周 | 0-6(0=周日) | * , - / | 1-5 周一到周五;0,6 周末 |
定时任务「不按预期跑」,多半踩了下面几个坑。
| 坑 | 后果 | 正确做法 |
|---|---|---|
| 日和周同时限制 | 多数实现里是「或」关系,触发次数超出预期 | 一般只限制其中一个,另一个用 * |
| 星期数字歧义 | 有的系统 0=周日,有的 1=周一,7 也可能是周日 | 以你所用系统文档为准,本工具采用 0=周日,6=周六 |
| 服务器时区不一致 | 本地算好的 9 点,到服务器变成别的时间 | 确认服务器时区,容器默认常为 UTC |
| 任务执行重叠 | 上一次没跑完下一次又启动,造成数据错乱 | 加锁 / flock,或让任务间隔大于最长执行时间 |
⚠️ 本工具仅在浏览器本地按标准 cron 规则推导表达式与执行时间,不代替你的系统实际调度。
「下次执行时间」基于你当前设备的系统时间与时区计算,服务器若使用 UTC 或其他时区,实际触发时刻会不同。
不同调度系统对星期(0/7 起始)、日与周同时约束、L / 秒字段、Quartz 6-7 段格式的支持存在差异,上线前请以目标系统(crontab、Quartz、Airflow、云函数等)的官方文档与实际测试为准。
像「2 月 30 日」这类不存在的日期永远不会触发,工具会提示无下一次执行,请改用月末 L 或有效日期。
所有计算都在你自己的浏览器本地完成,不会上传到任何服务器。
cron 是 Linux 和大量定时任务系统使用的时间表达式,用 5 段符号描述「什么时候执行」。它强大但反直觉:手写 0 9 * * 1-5 容易在星期、日与周的组合上出错。
这个工具把晦涩的符号变成点选规则:
① 可视化配置:分钟、小时、日、月、周分别选择「每 / 每 N / 区间 / 列表 / 指定」等规则;
② 实时生成:选择即生成标准 5 段表达式,并给出每段的中文含义;
③ 下次执行预览:本地计算并列出接下来 5 次真实触发时间,对不对一眼可见;
④ 常用预设:每分钟、每小时整点、每天 9 点、工作日、每周、每月、每年等一键套用;
⑤ 手动解析:也可以直接粘贴一个表达式,反查含义与执行时间;
⑥ 一键复制:粘贴到 crontab 或定时任务平台即可。
必须注意:
· 「下次执行」按你设备的时区算,服务器时区可能不同;
· 日和周一般只设一个,同时限制在多数系统里是「或」;
· 不存在的日期(如 2 月 30 日)不会触发。
整个计算过程都在你自己的浏览器里跑,不上传任何内容。
实现逻辑:
① 构建态:为五个字段分别维护「模式 + 参数」,按规则映射成 * / *\/N / a-b / a,b,c / v / L 等片段并拼接;
② 解析态:把表达式每段展开成允许值集合,支持 *、列表、区间、步长 *\/n、a-b/n、月末 L;
③ 求下次执行:从当前分钟起逐分钟向前匹配,命中分、时、日(含星期)、月约束即记录,最多向后推 366 天、取前 5 次;
④ 无效检测:数字越界、区间反向、空集、永不触发(如 2 月 30 日)会给出明确提示;
⑤ 双向同步:点预设或手动输入会回填构建器,编辑构建器会更新表达式。
它不做:不连接你的服务器、不真正创建定时任务、不处理 Quartz 特有秒/年字段与 ? # W 等扩展符号。
Asia/Shanghai);或 ② 按服务器时区换算后再填表达式。上线前建议先手动触发或看日志确认一次。* 时,两者是「或」的关系——满足任意一个就触发,而不是「且」,结果往往比你想的频繁得多。分 时 日 月 周。? # W 等本工具不处理的扩展符号。0),即 0 分 时 日 月 周;涉及 ? # 的复杂规则仍请以 Quartz 文档为准。0 0 30 2 *——2 月没有 30 号,永远不会触发,可改用月末 L;18-9;61。L),分钟填 59、小时填 23,得到 59 23 L * *。L 是部分实现的扩展写法,标准 crontab 原生不支持「日」位的 L——如果你的系统不支持,常见替代是「每月 1 号 00:00 执行上个月的收尾」,或在脚本里判断明天是否为 1 号。审核通过后就会展示在留言板上,稍安勿躁~
还没有留言,来抢沙发吧!