cron表达式
-
结构
从左到右: 秒 分 小时 月份中的日期 月份 星期中的日期 年份
-
各字段含义
字段 允许值 允许的特殊字符 秒 0-59 , - * / 分 0-59 , - * / 小时 0-23 , - * / 日期(DayofMonth) 1-31 , - * / L W C 月份 1-12或JAN-DEC , - * / 星期(DayofWeek) 1-7或SUN-SAT(1-SUN) , - * / L C # 年(可选,留空)(Year) 1970-2099 , - * / -
特殊符号的意思
-
*: 表示匹配该域的任意值,如果在minutes域使用*,则表达每分钟都会触发事件
-
?: 只能用在DayofMonth和DayofWeek两个域。它也匹配域的任意值,但实际不会。因为DayofMonth和DayofWeek会相互影响。例如想在每月的20日触发调度,不管20日到底是星期几,则只能使用如下写法: 13 13 15 20 * ?, 其中最后一位只能用?,而不能使用*,如果使用*表示不管星期几都会触发,实际上并不是这样。
为了防止天(月)和天(星期)发生冲突的,表示不指定值,当两个字段有一个指定值之后,为了避免冲突,另一个要设为?
-
-:表示范围,5-20表示从5分到20分,每分钟触发一次
-
/: 表示起始时间开始每隔一段时间触发一次,5/20,则5,25,45触发
-
,: 列出枚举值,5,20则表示在第5分和第20分触发一次
-
L: 表示最后,只能出现在DayofWeek和DayofMonth,如果DayofWeek使用5L,意味的一个星期四触发
-
W: 表示有效工作日(周一到周五),只能出现在DayofMonth域,系统会在离指定日期最近的有效工作日触发,如果使用了5W,如果5日是星期六,则会在4日,星期五触发,如果5日是星期天,则会在6日,星期一触发,ps:不会跨过月份
-
LW: 连用表示某个月最后一个工作日,即最后一个星期五
-
#: 用来确定每个月的第几个星期几,只能出现在DayofMonth域,例如4#2,则某月的第二个星期三
-
cron表达式例子
0 0 2 1 * ? * 每个月的1号凌晨2点整触发
0 15 10 ? * MON-FRI * 周一到周五每天上午10:15执行作业
0 15 10 ? * 6L 2002-2006 2002-2006年的每个月的最后一个星期五上午10:15执行作业
0 0 10,14,16 * * ? * 每天上午10点,下午2点,4点触发
0 0/30 9-17 * * ? * 工作时间内每隔半个小时
0 0 12 ? * WED * 每个星期三中午12点
0 0 12 * * ? * 每天中午12点
0 15 10 ? * * 每天上午10:15
0 15 10 * * ? 2005 2005年的每天上午10:15触发
0 * 14 * * ? 下午2点到2:59期间的每一分钟触发
0 0/5 14 * * ? 没天下午2点到下午2:55期间每5分钟触发一次
0 0/4 14,18 * * ? 每天下午2点期间和下午6点期间每5分钟触发一次
0 0-5 14 * * ? 每天下午2点到2:05期间的每一分钟触发一次
0 10,44 14 ? 3 WED 每年三月的星期三的下午2:10和2:44触发
0 15 10 ? * MON-FRI 周一至周五的上午10:15的触发
0 15 10 15 * ? 每个月15号上午10:15触发
0 15 10 ? * 6L 每月的最后一个星期五上午10:15触发
0 15 10 ? * 6L 2002-2005 2002年至2005年的每月的最后一个星期五上午10:15触发
0 15 10 ? * 6#3 每月的第三个星期五上午10:15触发
每年的4.1号上午10点触发
0 0 10 1 4 ? *
每隔15分钟触发一次
0 0/15 * * * ? *
在6点到10点时间段内每隔30分钟提醒一次
0 0/30 6-10 * * ? *
每个星期天的0点执行
0 0 0 ? * 1 *
每天的6点,12点,17点触发一次
0 0 6,12,17 * * ? *
每隔1秒触发一次
0/1 * * * * ? *
每隔星期五的下午5点59分59秒触发
59 59 17 ? * 6 *
每个月的最后一个工作日10点触发
0 0 10 LW * ? *