经典 Cron 表达式包含 5 个位置,中间用空格分隔。其标准语法如下:
[minute] [hour] [day of month] [month] [day of week]
其中:
[minute]
表示分钟,取值范围[0, 59]
[hour]
表示小时,取值范围[0, 23]
[day of month]
表示日期,取值范围[0, 31]
[month]
表示月份,取值范围[1, 12]
,也可以用名称简写(Jan - Dec)
[day of week]
表示星期,取值范围[0, 6]
,也可以用名称简写(Sun - Sat)
每个位置均可以使用如下模式:
,
:表示值的列表,例如1,3
表示当该位置为 1 和 3 时各执行一次-
:表示值的范围,例如1-3
表示当该位置为 1、2 和 3 时各执行一次/
:表示值的步进,例如*/2
表示该位置每 2 个单位执行一次,又如 1-9/2 表示该位置为 1、3、5、7 和 9 时各执行一次;步进默认为 1*
:表示该位置为任意值时都会执行,等价于 */1
经典样例:
* * * * *
:每分钟执行一次0 * * * *
:每小时的整点执行一次0 0 * * *
:每天 0 点执行一次0 0 1 * *
:每月 1 号 0 点执行一次0 0 1 1 *
:每年 1 月 1 日 0 点执行一次0 0 * * 0
:每星期日的 0 点执行一次
其他样例:
*/3 * * * *
:每 3 分钟执行一次0 8 * * 1-5
:每个工作日的早上 8 点执行一次0 8 * * 1,5
:每周一和周五的早上 8 点各执行一次0 9-15 * * *
:每天 9 点 - 15 点每个整点执行一次0 0 1 */3 *
:每个季度的第 1 天执行一次
在部分场景(例如 Node.js)中,对 Cron 表达式进行了拓展,采用 6 位的 Cron 表达式,其标准语法如下:
[second] [minute] [hour] [day of month] [month] [day of week]
相较于经典语法,第一位表示 “秒” 而不是 “分钟”,月份的取值范围为 [0, 11]
而不是 [1, 12]
。
6 位的拓展 Cron 表达式的在线分析工具:https://cron.qqe2.com/