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程序员。