cron表达式每10秒触发一次(cron时钟表达式的书写及触发规则)
cron表达式每10秒触发一次(cron时钟表达式的书写及触发规则)0-59秒字段允许值允许的特殊字符
前言
cron作为linux下的定时执行工具,可以在无需人工干预的情况下运行作业,常用于自动化脚本的规则运行
赋值范围及允许的特殊符号
掌握字段允许值以及特殊字符的使用方法,是自行解读并书写cron表达式必不可少的一步
字段 |
允许值 |
允许的特殊字符 |
秒 |
0-59 |
- * / |
分 |
0-59 |
- * / |
小时 |
0-23 |
- * / |
日期 |
1-31 |
- * ? / L W C |
月份 |
1-12或者JAN-EDC |
- * / |
星期 |
1-7或者SUN-SAT |
- * ? / L C # |
年(可为空) |
留空,1970-2099 |
- * / |
特殊符号的说明
在进行时间设定时,某些时间域可能会存在冲突,所以特殊字符的关键作用就在这里,用特殊字符规避冲突
特殊符号 |
使用说明 |
* |
“*”字符被用来指定所有的值。如:"*"在分钟的字段域里表示“每分钟”。 |
? |
“?”字符只在日期域和星期域中使用。月份中的日期和星期中的日期这两个元素是互斥的一起应该通过设置一个问号来表明不想设置那个字段。 |
- |
“-”字符被用来指定一个范围。如:“10-12”在小时域 表示“10点、11点、12点”。 |
, |
“ ”字符被用来指定另外的值。如:“MON WED FRI”在星期域里表示”星期一、星期三、星期五”。 |
/ |
“/”字符用于指定增量,字符前为初始值,字符后为递增值。如:“0/15”在秒域意思是从每分钟的0秒开始,每隔15秒触发一次,以此类推。 |
L |
L是‘last’的省略写法可以表示day-of-month和day-of-week域,但在两个字段中的意思不同,例如day-of-month域中表示一个月的最后一天。如果在day-of-week域表示‘7’或者‘SAT’,如果在day-of-week域中前面加上数字,它表示一个月的最后几天,例如‘6L’就表示一个月的最后一个星期五。 |
W |
字符“W”只允许在日期域出现。这个字符用于指定日期的最近工作日。例如:如果你在日期域中写 “15W”,表示:这个月15号最近的工作日。所以,如果15号是周六,则任务会在14号触发。如果15号是周日,则任务会在周一也就是16号触发。如果是在日期域填写“1W”即使1号是周六,那么任务也只会在下周一,也就是3号触发,“W”字符指定的最近工作日是不能够跨月份的。“L”和“W”可以在日期域中联合使用,LW表示这个月最后一周的工作日。 |
# |
字符“#”只允许在星期域中出现。这个字符用于指定本月的某某天。例如:“6#3”表示本月第三周的星期五(6表示星期五,3表示第三周)。“2#1”表示本月第一周的星期一。“4#5”表示第五周的星期三。 |
C |
字符“C”允许在日期域和星期域出现。这个字符依靠一个指定的“日历”。也就是说这个表达式的值依赖于相关的“日历”的计算结果,如果没有“日历”关联,则等价于所有包含的“日历”。如:日期域是“5C”表示关联“日历”中第一天,或者这个月开始的第一天的后5天。星期域是“1C”表示关联“日历”中第一天,或者星期的第一天的后1天,也就是周日的后一天(周一)。 |
表达式举例
按照上表给出的解释说明,可以通过cron表达式来确定具体触发时间,也可以通过具体时间来书写cron表达式
cron表达式 |
触发时间 |
"0 * 14 * * ?" |
每天下午2:00—2:59每隔一分钟触发一次 |
"0 0/5 14 18 * * ?" |
每天下午2:00—2:55和6:00—6:55期间的每5分钟触发 |
"0 10 44 14 ? 3 WED" |
每年3月份的周三下午2:10和2:44触发 |
"0 15 10 ? * MON-FRI" |
每月的周一到周五上午10:15触发 |
"0 15 10 L * ?" |
每月最后一天上午10:15触发 |
"0 15 10 ? * 6L" |
每月最后一个周五上午10:15触发 |
"0 15 10 ? * 6#3" |
每月第三个周五上午10:15触发 |