Cron 指计划任务,用7个以空格分开的域(字符串)表示任务在约定的时间执行。
7个域分别代表如下含义:
Seconds | Minutes | Hours | DayOfMonths | Month | DayOfWeek | Year[Optional]
每个域均可使用值 ","、 "-" 、 "*"、 "/",
其他选值如下:
Seconds: 有效值范围 [0 - 59]
Minutes: 有效值范围 [0 - 59]
Hours : 有效值范围 [0 - 23]
DayOfMonths :还可以使用 "?"、 "L"、 "W"、 "C", 有效值范围 [1 - 31]
Month : 有效值范围 [1 - 12] 或 [JAN - DEC]
DayOfWeek : 还可以使用 "?"、 "L"、 "C"、 "#", 有效值范围 [1 - 7] 或 [SUN - SAT], 1表示周一
Year : 有效值范围为[1970 - 2099]
上面的值中,
> "*" 表示匹配任意值
> "-" 表示范围值,如Hours域值为 [9-17]表示朝9晚5,每个小时执行
> "," 表示枚举值,如Month域值为 1,3,5 表示1月份、3月份、5月份执行
> "/" 表示固定频率值,如Seconds域值为 */5 表示每隔5秒触发一次
> "?" 仅允许在 DayOfMonths 或 DayOfWeek 两个域中使用一个,问号表示忽略该域的值,例如:当DayOfWeek为1, DayOfMonths为"?" 时 表示每周日执行,且忽略 DayOfMonths 这个域
> "L" 表示最后,仅允许在DayOfMonths 或DayOfWeek 中使用,如:DayOfWeek为1表示最后一个周日触发
> "W" 表示最近有效工作日,仅允许用在DayOfMonths域, 如该域值为 8W, 如果8号为工作日,则8号触发;如果8号为周六,则在7号触发;如果8号为周日,则在9号触发,另W查找时不会垮月。
> "#" 表示某月的第几个星期几,仅允许用在DayOfMonths域,如:1#2 表示某个月得第二个周日
下面是一些简单的例子:
秒 分 时 日 月 周 年(可选)
0 0 9 * * * * 每天9点触发
0 0 9 ? * * 每天9点触发(年可以忽略,每周7天每天触发所以忽略日)
0 0 9 * * ? 每天9点触发(每天触发,所以忽略周)
0 30 8 1 * * 每月1号8:30触发
0 0 8,10,12 * * * 每天8点、10点、12点触发
0 0 8-12 * * * 每天8-12点,每个小时触发
0 * 14 * * * 每天 14:00 - 14:59 每分钟触发
0 0/5 * * * * 每隔5分钟触发一次
0 0/5 15 * * * 每天15:00 到 15:55之间每5分钟触发一次
0 0 8 * L * 每月最后一天的8:00触发
0 30 8 ? * 5L 每月最后一个周四8:30触发
0 30 8 ?* 1#3 每月第三个周日的8:30触发