Cron 表达式 是一种字符串格式,用于定义周期性任务的时间规则。它广泛用于调度系统,像 Unix/Linux 的 Cron、许多任务调度库(如 Go 的 robfig/cron
)。
Cron 表达式通常由 5-7 个字段 组成,表示时间的不同部分,字段之间用空格分隔。典型的 5 字段表达式格式为:
* * * * *
- - - - -
| | | | +--- 星期(0 - 7,0 和 7 都表示星期日)
| | | +----- 月份(1 - 12)
| | +------- 日期(1 - 31)
| +--------- 小时(0 - 23)
+----------- 分钟(0 - 59)
如果扩展为 6 字段或 7 字段的 Cron 表达式,通常分别用于秒和年份:
* * * * * * *
- - - - - - -
| | | | | | +--- 年份(可选,1970 - 2099)
| | | | | +----- 秒(可选,0 - 59)
每个字段可以是以下值:
字段 | 允许值 | 描述 |
---|---|---|
秒(可选) | 0-59 | 秒数 |
分钟 | 0-59 | 分钟数 |
小时 | 0-23 | 小时数(24 小时制) |
日期 | 1-31 | 月中的哪一天 |
月份 | 1-12 或 JAN-DEC | 月份 |
星期 | 0-7 或 SUN-SAT | 星期(0 和 7 表示周日) |
年(可选) | 1970-2099 | 年份范围 |
星号(*
)
表示“每个可能的值”。
例:* * * * *
表示每分钟触发一次。
逗号(,
)
表示多个值。
例:5,10,15 * * * *
表示在每小时的第 5、10、15 分钟触发。
减号(-
)
表示范围。
例:1-5 * * * *
表示每小时的第 1 到第 5 分钟触发。
斜杠(/
)
表示步进值。
例:*/5 * * * *
表示每 5 分钟触发一次。
问号(?
)
用于“日期”和“星期”字段,表示“无特定值”,避免冲突。
例:在 日期
设置了值时,星期
用 ?
表示忽略星期。
井号(#
)
表示某月的第几个星期几(用于星期字段)。
例:2#1
表示每月的第一个星期二。
L(最后,Last)
用于表示最后一天或最后一个星期几。
例:L
在 日期
字段表示该月的最后一天,5L
在 星期
字段表示该月的最后一个星期五。
W(工作日,Weekday)
表示最接近指定日期的工作日。
例:15W
表示最接近每月 15 号的工作日。
C(与日历相关的值)
用于表示上次任务执行后触发的日期。
例:5C
表示在 5 号之后的第一个有效日期。
每分钟运行一次
* * * * *
每天凌晨 1 点运行
0 1 * * *
每月的 1 号和 15 号凌晨 2 点运行
0 2 1,15 * *
每个工作日(周一到周五)上午 9 点到下午 5 点,每小时运行一次
0 9-17 * * 1-5
每 5 分钟运行一次
*/5 * * * *
每月的最后一天午夜运行
0 0 L * *
每周一凌晨 3 点运行
0 3 * * 1
日期
和 星期
字段可以配合使用,如果有冲突,优先满足其中之一。秒
字段、L
、W
等),需要根据所使用的调度系统确认支持范围。如果需要更多的功能,可以使用 robfig/cron
等库,其支持多种 Cron 表达式扩展。
正在学习Go语言的PHP程序员。