详解 Cron 表达式
一、背景介绍Cron 表达式,最初是应用于· Unix 系统中的 crontab 命令,用于设置周期性被执行的指令。Cron 表达式应用广泛,在服务器中,可以利用 linux 的 cron 服务定时执行一些脚本;在 Java Web 中,利用 cron 可以实现任务的定时执行。本文将介绍 Cron 表达式的语法,理解 Cron 表达式的构成。二、Cron 语法Cron 表达式由6位或7位由...
·
一、背景介绍
Cron 表达式,最初是应用于· Unix 系统中的 crontab
命令,用于设置周期性被执行的指令。Cron 表达式应用广泛,在服务器中,可以利用 linux 的 cron 服务定时执行一些脚本;在 Java Web 中,利用 cron 可以实现任务的定时执行。
本文将介绍 Cron 表达式的语法,理解 Cron 表达式的构成。
二、Cron 语法
Cron 表达式由6位或7位由空格分隔的时间字段构成,Cron 表达式忽略字符和特殊值的大小写,具体如下表所示。
位置 | 含义 | 允许数值 | 允许特殊值 |
---|---|---|---|
1 | 秒 | 0 ~ 59 | , - * / |
2 | 分钟 | 0 ~ 59 | , - * / |
3 | 小时 | 0 ~ 23 | , - * / |
4 | 日期 | 1 ~ 31 但也与具体月份有关,不是每个月都有31日 | , - * ? / L W C |
5 | 月份 | 1 ~ 12 或 JAN - DEC | , - * / |
6 | 星期 | 1 ~ 7 或 SUN,MON,TUE,WED,THU,FRI,SAT【注:周日是第一天】 | , - * ? / L C # |
7 | 年份(可选) | 1970 ~ 2099 | , - * / |
数值的含义好理解,除了数值外,每个字段还允许使用一些特殊字符,其含义如下:
*
:表示所在时间域所有可能的值。例如,在分钟字段时表示每分钟都会执行;,
:表示一个列表值。例如,在星期字段中使用“MON,WED,FRI”,则表示星期一,星期三和星期五;-
:表示一个范围。例如,在小时字段中使用“10-12”,则表示从10到12点,即10,11,12点;/
:表示数值的增量。/
左侧表示起始值,右侧表示增量,终止值为该字段最大值。例如,在分钟字段中使用“0/15”,则表示为0,15,30,45秒,而“5/15”表示5,20,35,50秒;?
:表示占位符,没有实际意义,存在于日期和星期字段中;L
:表示**“最后**”的意思,存在于日期和星期字段中。- 当出现在日期字段中,表示这个月的最后一天,如一月份的31日,四月份的30日。
- 当单独出现在星期字段中,表示该星期的最后一天,即等价于 7 或 SAT,表示周六。
- 当配合数值出现在星期字段中,表示该月的最后一个星期几。例如“6L”表示该月的最后一个星期五。
W
:表示离日期最近的工作日,存在于日期字段中。- 例如“15W”表示离15日最近的工作日,如果15日是周六,那么结果就是14日周五;如果15日是周日,那么结果就是16日周一;如果15日是周一,那么结果就是15日周一。
- 另外
W
不能跨月。例如1日是周六,那么“1W”结果是3W周一,而不是上个月的周五。
C
:表示“DayOfWeek”和“DayOfMonth”的意思,即每周/每月的第N天,存在于日期和星期字段中。- 日期字段中,“5C”表示每个月的第5天。
- 星期字段中,“5C”表示每周的第五天,即每周四。
#
:表示每个月的第几个星期几,存在于星期字段中。例如“3#3”表示每个月第三个的星期二,“7#5”表示每个月的第5个星期六。
三、例子实战
Cron | Desc | Remark |
---|---|---|
0 0 12 * * ? | 每天中午12点执行 | |
0 15 10 * * ? 2019 | 2019年每天10点15分执行 | |
0 0/5 14,18 * * ? | 每天14:0014:55每5分钟执行<br>每天18:0018:55每5分钟执行 | 分钟取值范围为0~59 因此“0/5”应该是0,5,10……55 |
0 10,44 14 ? 3 WED | 三月份的每个星期三,14:10分和14:44执行 | |
0 15 10 ? * 6L | 每个月的最后一个星期五的10:15执行 | |
0 15 10 ? * 6#3 | 每个月的第三个星期五的10:15执行 | |
0 15 10 ? * MON-FRI | 每个月的星期一到星期五的10:15执行 |
更多推荐
已为社区贡献1条内容
所有评论(0)