文章目录
一、cron表达式
1.1 基本介绍
Cron表达式是一种用于指定定时任务的时间表达式,常用来指定任务的执行时间、执行频率和执行间隔。它由6~7个字段组成,分别表示秒、分、时、日期、月份、星期、年份(可省略)。
1.2 字段取值和取值范围
下表为Cron表达式中七个字段的取值范围和支持的特殊字符:
字段 | 是否必须 | 取值范围 | 特殊字符 |
---|---|---|---|
秒(Seconds) | 是 | [0, 59] | * , - / |
分 (Minutes) | 是 | [0, 59] | * , - / |
小时 (Hours) | 是 | [0, 23] | * , - / |
日期 (Day of month) | 是 | [1, 31] | * , - / ? L W |
月 (Month) | 是 | [1, 12] 或 [JAN, DEC] | * , - / |
星期 (Day of week) | 是 | [1, 7] 或 [MON, SUN] | * , - / ? L # |
年 | 否 | [当前年份,2099] | * , - / |
1.3 特殊字符
Cron表达式中的每个字段都支持特殊字符,每个特殊字符都有其特殊含义。
特殊字符 | 含义 | 示例 |
---|---|---|
* | 匹配任意值 | 在字段月中,*表示每个月 |
, | 列出枚举值 | 在字段分钟中,5,20表示分别在5分钟和20分钟触发一次 |
- | 指定范围 | 在字段分钟中,5-20表示从5分钟到20分钟之间每隔一分钟触发一次 |
/ | 指定数值的增量 | 在字段分钟中,0/15表示从第0分钟开始,每15分钟。在字段分钟中3/20表示从第3分钟开始,每20分钟。 |
? | 不指定值,仅用于日期和星期 | 当字段日期或星期其中之一被指定了值以后,为了避免冲突,需要将另一个字段的值设为?。 |
L | 单词Last的首字母,表示最后一天,仅字段日期和星期支持该字符。 | 在字段日期中,L表示某个月的最后一天。在字段星期中,L表示一个星期的最后一天,也就是星期日(SUN)。 |
W | 除周末以外的有效工作日,在离指定日期的最近的有效工作日触发事件。W字符寻找最近有效工作日时不会跨过当前月份,连用字符LW时表示为指定月份的最后一个工作日。仅字段日期支持该字符 | 在字段日期中5W,如果5日是星期六,则将在最近的工作日星期五,即4日触发。如果5日是星期天,则将在最近的工作日星期一,即6日触发;如果5日在星期一到星期五中的一天,则就在5日触发。 |
# | 确定每个月的第几个星期几。仅字段星期支持该字符。 | 在字段星期中,4#2表示某月的第二个星期四。 |
- L,指定L字符时,避免指定列表或范围,否则会导致逻辑问题。如果在L前有具体的内容,例如,在字段星期中的
6L
表示这个月的最后一个星期六。
1.4 示例
1.4.1 每天固定时间执行
0 15 10 ? * *
,每天上午10:15执行任务0 0 12 * * ?
,每天中午12:00执行任务
1.4.2 每天多个固定时间执行
0 0 10,14,16 * * ?
,每天上午10:00点、下午14:00以及下午16:00执行任务
1.4.3 每间隔一段时间执行
0 0/30 9-17 * * ?
,每天上午09:00到下午17:00时间段内每隔半小时执行任务0 * 14 * * ?
,每天下午14:00到下午14:59时间段内每隔1分钟执行任务0 0-5 14 * * ?
,每天下午14:00到下午14:05时间段内每隔1分钟执行任务0 0/5 14 * * ?
,每天下午14:00到下午14:55时间段内每隔5分钟执行任务0 0/5 14,18 * * ?
,每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务
1.4.4 特定星期/日期执行
0 0 12 ? * WED
,每个星期三中午12:00执行任务0 15 10 15 * ?
,每月15日上午10:15执行任务0 15 10 L * ?
,每月最后一日上午10:15执行任务0 15 10 ? * 6L
,每月最后一个星期六上午10:15执行任务0 15 10 ? * 6#3
,每月第三个星期六上午10:15执行任务
1.4.5 特定年份的特定日期执行
0 10,44 14 ? 3 WED
,每年3月的每个星期三下午14:10和14:44执行任务0 15 10 ? * * 2022
,2022年每天上午10:15执行任务0 15 10 ? * * *
,每年每天上午10:15执行任务0 0/5 14,18 * * ? 2022
,2022年每天下午14:00到下午14:55、下午18:00到下午18:55时间段内每隔5分钟执行任务0 15 10 ? * 6#3 2022,2023
,2022年至2023年每月第三个星期六上午10:15执行任务0 0/30 9-17 * * ? 2022-2025
,2022年至2025年每天上午09:00到下午17:30时间段内每隔半小时执行任务0 10,44 14 ? 3 WED 2022/2
,从2022年开始,每隔两年3月的每个星期三下午14:10和14:44执行任务
1.5 cron工具
参考文献:
1.Cron表达式