cron是在基于Unix的系统上可用的基本实用程序。 它使用户可以安排任务在指定的日期/时间定期运行;cron表达式格式被广泛采用,如SpringBoot中的定时器。
Cron表达式
cron表达式包含6个字段:
<second> <minute> <hour> <day-of-month> <month> <day-of-week> <year> <command>
上面这些字段中,<year>字段是可选填的。
每个字段可填写的值如下:
字段名 | 允许值 | 允许字符 |
---|---|---|
second | 0-59 | , - * / |
minute | 0-59 | , - * / |
hour | 0-23 | , - * / |
day-of-month | 0-31 | , - * ? / L W C |
month | 1-12 or JAN-DEC | , - * / |
day-of-week | 1-7 or SUN-SAT | , - * / ? L C # |
year | 1970-2099 | , - * / |
表达式中字符
* (all) 它用于指定事件应在每个时间单位发生。 例如:在 <minute> 中使用
*
,表示每分钟都会执行。? (any) 在<day-of-month>和<day-of-week>字段中使用它来表示任意值,忽略该字段值。 例如,我们想要在每个月的5号触发它,而不管它这天是周几,这样就可以将 <day-of-week> 指定为“?”。
- (range) 表示值的范围,例如,<hour>字段中的“10-11”表示第10和第11个小时会执行。
, (values) 用户指定多个值,例如,<day-of-week>中设置”MON, WED, FRI“则表示周一、周三、周五会执行。
/ (increments) 指定增量值。 例如,<minute>字段中设置“ 5/15”则表示每小时的5、20、35和50分钟执行(从第5分钟开始每隔15分钟执行一次)。
L (last) 在各个字段中使用时,它具有不同的含义。 例如,如果在<day-of-month>字段中使用它,则表示月份的最后一天,如“1月31日”,根据日历月份依此类推。 它也可以与”-“一起使用,例如“L-3”,它表示“日历月的第三天到最后一天”。 在<day-of-week>中,它指定“一周的最后一天”。 它也可以与<day-of-week>中的另一个值一起使用,例如“ 6L”,表示“最后一个星期五”
W (weekday) 用于指定最接近该月某一天的工作日(周一到周五)。例如,如果我们在<day-of-month>字段中指定10W,那么它意味着该月10日附近的工作日。所以如果10号是星期六,那么9号触发作业,如果10号是星期天,那么11号触发作业。如果您在<day-of-month>中指定了1W,如果1日是星期六,那么作业将在3日即星期一被触发,它将不会跳回前一个月。
# 它用于指定每个月第几个星期几,例如,“该月的第三个星期五”可以表示为“6#3”。
C 该字符只在<day-of-month>和<day-of-week>字段中使用,代表“Calendar”的意思。它的意思是计划所关联的日期,如果日期没有被关联,则相当于日历中所有日期。例如 5C 在日期字段中就相当于日历 5 日以后的第一天;1C 在星期字段中相当于星期日后的第一天。
Cron表达式示例
每天上午8点
0 0 8 * * ?
...