Cron 表达式详解
前言
之前在配置 ip 黑名单的时候配置定时任务中需要编写 cron 表达式。
一个 cron 表达式最少有 5 个空格来分割时间元素,总共有 7 个元素,分别如下:
① 秒(0-59)
② 分钟(0-59)
③ 小时(0-23)
④ 天(月的第几天)(0-31,但是你需要考虑你月的天数)
⑤ 月(0-11)
⑥ 天(星期几)(1-7 1=SUN 或 SUN,MON,TUE,WED,THU,FRI,SAT)
⑦ 年份(1970-2099)
说明:每个元素可以是
- 一个具体的值(如 6)
- 一个连续区间(9-12)
- 一个间隔时间(0/5)(表示从 0 开始每隔 5,写到哪个元素就表示间隔的是哪个元素,如果写到了秒,那么表示从 0 秒开始,每隔 5 秒执行一次)
- 一个列表(1,3,5)(表示第 1,3,5 时间执行,也是要根据写到了哪个元素上)
- 通配符(
,- * ? / L W #
)
举个例子
从注释里我们可以了解到:
第 1 个:它的秒位为 0,表示每个 0 秒,分位为 */5,意思是每 5 分钟。所以总的来说就是每 5 分钟(每 5 分 0 秒)时执行一次;
第 2 个:它的秒位为 0,分位为 30,时位为一串集合,则它的意思是每天 8 点半、10 点半、12 点半、14 点半、16 点半、21 点半各执行一次;
第 3 个:我想你已经知道它的意思了,没错,它就是每个小时整点(整点 0 分 0 秒)执行一次。
从上面三个列子中,我想你已经了解了 orcn 表达式的大致意思了:数字则表示具体时间,* 则表示任意时间,*/x 则表示每多少时间,还可以用集合表示具体的几个时间点。
用短横线(-)表示时间段:
比如:我们的上班时间朝 9 晚 6 为(周一到周五的早上 9 点到晚上 6 点),则 cron
表达式为:0 0 9-18 * * MON-FRI
星期一到星期天的英文为:Monday
,Tuesday
、Wednesday
、Thursday
、Friday
、Saturday
、Sunday
,取前三个字母,然后大写表示星期。
用 L 表示最后,L 是单词 Last(最后的)的首字母:
比如:假设每个最后一天,下午 2 点发工资的时间,则 cron 表达式为:0 0 14 L * ?
注:如果没有具体说明是星期几,通常用问号代替。
其他不常用的功能 #,W 这里不就介绍了,想知道的朋友可以自己去查阅资料,因为在实际工作中,用得极少。
而我们最常用的就是在某个时间点,或者某些时间点执行程序。
案例
一些 cron 表达式案例
*/5 * * * * ?
每隔 5 秒执行一次
0 */1 * * * ?
每隔 1 分钟执行一次
0 0 5-15 * * ?
每天 5-15 点整点触发
0 0/3 * * * ?
每三分钟触发一次
0 0-5 14 * * ?
在每天下午 2 点到下午 2:05 期间的每 1 分钟触发
0 0/5 14 * * ?
在每天下午 2 点到下午 2:55 期间的每 5 分钟触发
0 0/5 14,18 * * ?
在每天下午 2 点到 2:55 期间和下午 6 点到 6:55 期间的每 5 分钟触发
0 0/30 9-17 * * ?
朝九晚五工作时间内每半小时
0 0 10,14,16 * * ?
每天上午 10 点,下午 2 点,4 点
0 0 12 ? * WED
表示每个星期三中午 12 点
0 0 17 ? * TUES,THUR,SAT
每周二、四、六下午五点
0 10,44 14 ? 3 WED
每年三月的星期三的下午 2:10 和 2:44 触发
0 15 10 ? * MON-FRI
周一至周五的上午 10:15 触发
0 0 23 L * ?
每月最后一天 23 点执行一次
0 15 10 L * ?
每月最后一日的上午 10:15 触发
0 15 10 ? * 6L
每月的最后一个星期五上午 10:15 触发
0 15 10 * * ? 2005
2005 年的每天上午 10:15 触发
0 15 10 ? * 6L 2002-2005
2002 年至 2005 年的每月的最后一个星期五上午 10:15 触发
0 15 10 ? * 6#3
每月的第三个星期五上午 10:15 触发
30 * * * * ?
每半分钟触发任务
30 10 * * * ?
每小时的 10 分 30 秒触发任务
30 10 1 * * ?
每天 1 点 10 分 30 秒触发任务
30 10 1 20 * ?
每月 20 号 1 点 10 分 30 秒触发任务
30 10 1 20 10 ? *
每年 10 月 20 号 1 点 10 分 30 秒触发任务
30 10 1 20 10 ? 2011
2011 年 10 月 20 号 1 点 10 分 30 秒触发任务
30 10 1 ? 10 * 2011
2011 年 10 月每天 1 点 10 分 30 秒触发任务
30 10 1 ? 10 SUN 2011
2011 年 10 月每周日 1 点 10 分 30 秒触发任务
15,30,45 * * * * ?
每 15 秒,30 秒,45 秒时触发任务
15-45 * * * * ?
15 到 45 秒内,每秒都触发任务
15/5 * * * * ?
每分钟的每 15 秒开始触发,每隔 5 秒触发一次
15-30/5 * * * * ?
每分钟的 15 秒到 30 秒之间开始触发,每隔 5 秒触发一次
0 0/3 * * * ?
每小时的第 0 分 0 秒开始,每三分钟触发一次
0 15 10 ? * MON-FRI
星期一到星期五的 10 点 15 分 0 秒触发任务
0 15 10 L * ?
每个月最后一天的 10 点 15 分 0 秒触发任务
0 15 10 LW * ?
每个月最后一个工作日的 10 点 15 分 0 秒触发任务
0 15 10 ? * 5L
每个月最后一个星期四的 10 点 15 分 0 秒触发任务
0 15 10 ? * 5#3
每个月第三周的星期四的 10 点 15 分 0 秒触发任务
后记
原文地址 www.jianjunwen.com