cron表达式
Cron表达式简单来说就是一个字符串,字符串以5或6个空格隔开,分为6或7个域,每一个域代表一个含义,Cron有如下两种语法格式:
- Seconds Minutes Hours DayofMonth Month DayofWeek Year (七个域)
秒 分钟 小时 月份中的天 月份 星期中的天 年 - Seconds Minutes Hours DayofMonth Month DayofWeek(六个域)
- 各字段的含义
字段 | 允许值 | 允许的特殊字符 |
---|---|---|
秒(Seconds) | 0~59的整数 | , - * / 四个字符 |
分(Minutes) | 0~59的整数 | , - * / 四个字符 |
小时(Hours) | 0~23的整数 | , - * / 四个字符 |
日期(日)(DayofMonth) | 1~31的整数(但是你需要考虑你月的天数) | ,- * ? / L W C 八个字符 |
月份(Month) | 1~12的整数或者 JAN-DEC | , - * / 四个字符 |
星期(DayofWeek) | 1~7的整数或者 SUN-SAT (1=SUN) | , - * ? / L C # 八个字符 |
年(可选,留空)(Year) | 1970~2099 | , - * / 四个字符 |
- ‘*’ 表示 匹配该区域任何值 假如Seconds使用 * 就会在每秒触发
- ? 可以用在日期(日)和星期字段 用来指出‘没有特定的值’ 日期和星期字段是互斥的 一个字段设置值之后另一个字段必须表示没有意义 所以就出现了’?’
- 也就是说 日期和星期 必须有且仅有 一个是’?’
- ‘-’ 表示范围 比如Seconds 2-12 表示在2秒到12秒时间内 每秒触发一次
- ‘/’ 表示起始时间开始触发每隔固定事件触发一次 Minutes 5/15 表示第5分钟开始触发第一次 过15分钟也就是 20分钟 35分钟弄50分钟 各触发一次
- ‘,’ 表示枚举 比如 Hours 1,5,8 表示在1点 5点 8点 各触发一次
- ‘L’表示最后 只能出现在 日期和星期中 如果在星期中是 5L表示在最后一个星期四 触发一次 (1-7 周日-周六)
- ‘W’表示有效工作日(周一到周五) 只能出现在日期中 系统将会在指定日期的最近有效工作日触发 例如 使用5W 如果5日是星期日那么将会在6日(星期五)触发 如果5日是星期六 那么将会在4日(星期五)触发 如果5日是星期一到星期五中的某一天 那就在五日触发 W的最近工作日寻找不会跨月
- LW 可以连用 表示在某月的最后一天最近的工作日
- ‘#’只能在日期中出现 4#2 表示 每个月第四个星期二
常用表达式的例子
- 每隔5秒执行一次:*/5 * * * * ?
- 每隔5分钟执行一次:0 */5 * * * ?
- 每天5点执行一次:0 0 5 * * ?
- 每月1号凌晨1点执行一次:0 0 1 1 * ?
- 每月最后一天23点执行一次:0 0 23 L * ?
- 每周星期天凌晨1点实行一次:0 0 1 ? * L
- 在26分、29分、33分执行一次:0 26,29,33 * * * ?
- 每天的0点、13点、18点、21点都执行一次:0 0 0,13,18,21 * * ?
- 周一到周五每天上午10:15执行作业 0 15 10 ? * MON-FRI
- 表示2002-2006年的每个月的最后一个星期五上午10:15执行作
- 表示2002-2006年的每个月的最后一个星期五上午10:15执行
0 15 10 ? 6L 2002-2006 - 朝九晚五工作时间内每半小时 0 0/30 9-17 * * ?
- 表示每个星期三中午12点 0 0 12 ? * WED
- 在每天下午2点到下午2:59期间的每1分钟触发 0 * 14 * * ?
- 在每天下午2点到下午2:55期间的每5分钟触发 0 0/5 14 * * ?
- 每个月3号 凌晨3点 执行一次 0 0 3 3 * ?