DevToolbox
跳到主内容

Cron 表达式

解析表达式、中文说明与接下来 8 次运行时间

含义09:00 · 周一、周二、周三、周四、周五

字段解析

字段写法取值数展开
分010
时919
日*全部1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20 …
月*全部1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12
周1-551, 2, 3, 4, 5

接下来 8 次运行时间

本地时区

正在计算…

注意标准 cron 的语义:日 与 周 同时被限定时是「或」的关系(例如 0 0 1 * 1 表示每月 1 号或每周一)。 本工具按此语义计算。

段数5 段
规范化0 9 * * 1-5
下次运行—
频率每天一次
月每月
周周一、周二、周三、周四、周五

关于Cron 表达式

Cron 表达式由五个字段组成——分、时、日、月、周,部分实现还支持第六个「秒」字段。每个字段都可用 *、单值、范围(1-5)、步长(*/10)与列表(1,3,5)组合,还支持 JAN-MAR、MON 这样的名称。看似简单,但「日」与「周」同时被限定时是「或」的关系,这一点经常被写错。

本工具会展开每个字段实际匹配的取值,给出中文含义,并计算接下来 8 次运行时间(含相对时间提示)。支持 @daily、@hourly 等常用宏,并内置备份、监控、月报等常见场景的表达式可以直接套用。

常见问题

为什么「0 0 1 * 1」不是每月 1 号且是周一?

这是 cron 的历史语义:当日和周两个字段都被限定时(都不是 *),满足任意一个就会执行,即「或」的关系。因此 0 0 1 * 1 表示每月 1 号或每周一。要表达「每月 1 号且是周一」,需要在脚本里再判断一次日期。

5 段和 6 段有什么区别?

标准 crontab 是 5 段(分 时 日 月 周),最小精度为分钟。部分调度器(如 Quartz、部分云厂商)支持 6 段,第一位是秒,最小精度为秒。本工具两种都支持,会按段数自动判断。

算出来的时间和服务器上执行的不一致?

先确认时区:cron 按服务器本地时区执行,而本工具按你浏览器的本地时区计算。如果服务器使用 UTC 而你在东八区,同一表达式会相差 8 小时。另外注意 */5 表示「从 0 开始每 5 分钟」,而不是「从当前时间起每 5 分钟」。