Cron表达式0 0 6/2 * *的日步长跨月执行规则咨询
Cron表达式
0 0 6/2 * *日字段步长执行逻辑 首先给出明确结论:该表达式的日字段步长以自然月为边界,每个月独立从6日开始按2天间隔调度,不会跨月连续累加日期,你列出的跨月连续计算的执行时序不符合标准Cron规则。
规则拆解
标准5段Cron表达式的格式为分 时 日 月 周,0 0 6/2 * *各字段匹配逻辑如下:
- 分钟位
0:每小时第0分钟触发 - 小时位
0:凌晨0点触发 - 日期位
6/2:在当前月的合法日期范围内,从6日开始,每间隔2天匹配一次 - 月份位
*:所有自然月均生效 - 星期位
*:不限制星期值
Cron的所有字段匹配是独立、无状态的,不会保留上一个周期的计算结果跨字段/跨周期累加。日期位的取值范围就是当前自然月的1日到当月最后1天,步长计算仅在这个范围内生效,到月末就会重置,不会把上个月的步长计数顺延到下个月。
实际执行时序
你列出的6月执行日期是正确的,但7月的日期不符合规则,实际执行的部分日期参考如下:
2022-06-06 2022-06-08 2022-06-10 ... 2022-06-28 2022-06-30 # 7月直接重置起点,不会接续6月30日加2天到7月2日 2022-07-06 2022-07-08 2022-07-10 ... 2022-07-30 2022-08-06 ...
判断逻辑非常简单:对任意一个月的任意日期,只要满足「日期≥6,且(日期-6)能被2整除」,就会命中日期规则,和上个月的最后执行日期没有任何关系。
注:极少数非标准的自定义Cron实现可能存在特殊逻辑,但Linux原生crontab、Quartz、Spring Schedule等绝大多数通用调度组件的Cron解析都遵循上述规则。
内容的提问来源于stack exchange,提问作者Александр
相关产品推荐
相关产品推荐

