一、明确每个位置代表的含义:
从左至右,依次表示:
秒 分 时 日 月 周 年
通配符一般使用‘*’,也可使用‘_’或者‘/’,周的位置一般用‘?’
二、生成规则:
2.1、从x时间开始,每隔y时间执行一次,则在对应的位置上写上:x/y;
例:
从0分钟开始,每5分钟执行一次,表达式为:0 0/5 * * * ? *
从上午10点开始,每3个小时执行一次,表达式为:0 0 10/3 * * ? *
2.2、定点执行,在对应的位置上写上对应的数值即可。
例:
- 每天5点定时执行一次,表达式为:0 0 5 * * ? *
- 在每个小时的25分执行一次,表达式为:0 25 * * * ? *
2.3、从x时间到y时间段执行,在对应的位置上写上:x-y。
例:
每天上午11点到下午2点执行,表达式为:0 0 11-14 * * ? *
每个小时的15分到30分执行,表达式为:0 15-30 * * * ? *
2.4、指定时间点执行。
这种情况很简单,只需要在对应的位置写上你要执行时间的时间点,用英文逗号(,)分割开就可以了,这里不再举例说明了。
可根据实际情况进行组合。
例:
每天上午11点15-11点45分执行,表达式为:0 15-45 11 * * ? *
每天上午10点到下午3点,从15分中开始,每30分钟执行一次,表达式为:0 15/30 10-15 * * ? *
注:
1、在没有指定的位置上,前面的位置以0代替,后面的位置以通配符代替。
反例:从15分开始,每30分钟执行一次。 * 15/30 * * * ? *
此时因为秒的位置是通配符,会理解为任意秒都可以执行,与预期的不符合。
2、针对生成规则2.1,执行的时间是以后面的为基准的。
例: * 15/25 10-23 * * ? *
当前时间假设为16:20,则前5次的执行时间为:
16:40:00
17:15:00
17:40:00
18:15:00
18:40:00
表达式的含义为:每天10点到23点,从每点的15分开始,每25分钟执行一次。
因为当前时间为16:20,所以第一次执行时间会从16点15分开始算起,由于已经过了16:15,所以往后推算25分钟,是16:40,所以,第一次执行时间是16:40。
有人可能会以为第二次执行的时间会是17:05。这样算是不对的。因为16:40往后推算25分钟超过了17点,所以下一次的应该是以17点算起,从17点15开始执行第二次。依次类推。这就是“以后面的为基准”的意思。
以上内容仅代表个人理解,如有不对,可在评论区指出,共同进步!
个人整理了一份PDF文档,如果感觉不错的话,可以下载下来支持一下!
Cron表达式生成规则