cron 表达式是一个字符串,字符串以 5 或 6 个空格隔开,分开共 6 或 7 个域,每一个域代表一个含义

cron 表达式语法

[秒] [分] [小时] [日] [月] [周] [年]

注:[年] 不是必须的域,可以省略 [年],则一共 6 个域

图片

通配符说明:

  • * 表示所有值。 例如:在分的字段上设置 *, 表示每一分钟都会触发。
  • ? 表示不指定值。使用的场景为不需要关心当前设置这个字段的值。例如:要在每月的 10 号触发一个操作,但不关心是周几,所以需要周位置的那个字段设置为”?” 具体设置为 0 0 0 10 * ?
  • - 表示区间。例如 在小时上设置 “10-12”, 表示 10,11,12 点都会触发。
  • , 表示指定多个值,例如在周字段上设置 “MON,WED,FRI” 表示周一,周三和周五触发
  • / 用于递增触发。如在秒上面设置”5/15” 表示从 5 秒开始,每增 15 秒触发 (5,20,35,50)。 在月字段上设置’1/3’所示每月 1 号开始,每隔三天触发一次。
  • L 表示最后的意思。在日字段设置上,表示当月的最后一天 (依据当前月份,如果是二月还会依据是否是润年 [leap]), 在周字段上表示星期六,相当于”7” 或”SAT”。如果在”L” 前加上数字,则表示该数据的最后一个。例如在周字段上设置”6L” 这样的格式,则表示 “本月最后一个星期五”
  • W 表示离指定日期的最近那个工作日 (周一至周五). 例如在日字段上置”15W”,表示离每月 15 号最近的那个工作日触发。如果 15 号正好是周六,则找最近的周五 (14 号) 触发,如果 15 号是周未,则找最近的下周一 (16 号) 触发。如果 15 号正好在工作日 (周一至周五),则就在该天触发。如果指定格式为 “1W”, 它则表示每月 1 号往后最近的工作日触发。如果 1 号正是周六,则将在 3 号下周一触发。(注,”W” 前只能设置具体的数字,不允许区间”-“)。
  • # 序号 (表示每月的第几个周几),例如在周字段上设置”6#3” 表示在每月的第三个周六。注意如果指定”#5”, 正好第五周没有周六,则不会触发该配置 (用在母亲节和父亲节再合适不过了) ;小提示:’L’和 ‘W’可以一组合使用。如果在日字段上设置”LW”, 则表示在本月的最后一个工作日触发;周字段的设置,若使用英文字母是不区分大小写的,即 MON 与 mon 相同。

示例

每隔 5 秒执行一次:*/5 * * * * ?

每隔 1 分钟执行一次:0 */1 * * * ?

每天 23 点执行一次:0 0 23 * * ?

每天凌晨 1 点执行一次:0 0 1 * * ?

每月 1 号凌晨 1 点执行一次:0 0 1 1 * ?

每月最后一天 23 点执行一次:0 0 23 L * ?

每周星期天凌晨 1 点实行一次:0 0 1 ? * L

在 26 分、29 分、33 分执行一次:0 26,29,33 * * * ?

每天的 0 点、13 点、18 点、21 点都执行一次:0 0 0,13,18,21 * * ?