Cron表达式解析
⚡ 本地运行🔒 不上传数据🆓 免登录免费
cron 表达式是类 Unix 系统定时任务的调度语言,由 5 段组成:分、时、日、月、周。每一段都是一个"允许值集合":星号 * 表示全部取值,1-5 表示范围(含两端),1,15 表示列表,*/15 表示步长(每 15 个单位),还可以组合成 9-18/2(9 点到 18 点每 2 小时)。cron 守护进程每分钟唤醒一次,把当前时间与每个任务的五段逐一匹配,全部命中就执行。最容易踩坑的一点是:日(几号)和周(星期几)之间是"或"关系——两段同时受限时,任意一段命中任务就会执行,而不是两段同时满足。
典型用法有三类。第一,接手祖传 crontab:看到 "0 3 * * 1" 不知道什么意思,贴进来立刻得到"每周一凌晨 3 点执行",外加未来 5 次具体时间。第二,写定时任务时做验证:想表达"工作日 9 到 18 点每 15 分钟",写成 */15 9-18 * * 1-5 对不对?工具把每段拆开给你看,一眼确认。第三,排查"任务没跑":把线上表达式贴进来,看未来执行时间是否符合预期,快速定位是表达式写错了,还是执行器本身挂了。
边界情况要心里有数。5 段还是 6 段?标准 crontab 是 5 段;6 段(首段为秒)多见于 Node/Java 系调度器如 node-schedule、Quartz,本工具自动识别段数。月和周支持英文缩写(jan、mon),大小写不敏感;周日 0 和 7 都认作周日。非法输入会明确报错并指出第几个字段:字段数不是 5 或 6、数值超范围(比如分钟写了 60)、步长为 0。注意"2 月 30 日"这类不存在的日期:cron 本身会直接跳过,本工具的"未来 5 次"用真实日历逐分钟匹配,同样跳过,不会编造出虚假时间。
特别提醒两点。第一,未来执行时间按浏览器本地时区计算,而服务器上的 cron 按服务器时区跑,两边有时差的一定要换算后再上线;夏令时地区在切换当天还可能多跑或少跑一次。第二,一个放错位置的 * 能把"每天一次"变成"每分钟一次",上线前务必用本工具看一眼未来 5 次时间,确认节奏符合预期再发布。
使用方法
- 在输入框粘贴或输入 cron 表达式(5 段或 6 段,可点"填入示例"体验)
- 点"解析表达式",页面给出中文含义与每段取值拆解表
- 查看"未来 5 次执行时间",确认调度节奏符合预期(按浏览器本地时区)
- 点"复制结果"导出表达式、含义与未来执行时间,发给同事或记入文档
常见问题
cron 表达式的 5 段分别是什么?
依次是:分(0-59)、时(0-23)、日(1-31)、月(1-12)、周(0-7,0 和 7 都是周日)。有些系统支持 6 段,首段是秒(0-59)。每段的取值互不干扰,全部命中任务才执行——除了日和周是"或"关系。
日和周同时写了限制,是"且"还是"或"?
是"或",这是标准 cron 语义,也是新手最常踩的坑。比如 "0 0 1 * 1" 表示每月 1 日或每周一的午夜都会执行,而不是"既是 1 号又是周一"才执行。想要"且"的效果,得在任务脚本里自己再判断一次。
*/15、1-5、1,15 这些写法分别什么意思?
*/15 是步长,表示每 15 个单位(如分钟段就是每 15 分钟);1-5 是闭区间范围;1,15 是离散列表。它们可以组合,比如 9-18/2 表示 9 点到 18 点之间每 2 小时。注意步长的起点是该段的最小值,5-45/10 会得到 5、15、25、35、45。
为什么"未来 5 次"和我想的不一样?
按这个顺序排查:先看段数对不对(5 段还是 6 段,首段是不是秒);再看日/周的"或"关系有没有误解;月份天数是否合法(2 月没有 30 日,会被跳过);最后确认时区——本工具按浏览器本地时区计算,服务器 cron 按服务器时区跑,两边不一致时结果自然对不上。
支持 L、W、#、? 这些特殊符号吗?
不支持。本工具覆盖标准 crontab 语法(* , - / 加上月份/星期的英文缩写)。Quartz 扩展的 L(月最后一天)、W(最近工作日)、#(第几个星期几)、?(占位)属于另一套方言,需要 Quartz 专用解析器,贴进来会报"含非法字符"。