如何配置cron实现奇周、偶周周五分别执行对应定时任务
Cron 奇偶周周五执行任务解决方案
原生cron没有直接支持奇偶周调度的语法,可通过以下两种通用方案实现需求:
方案1:原生cron兼容方案(推荐,无需替换现有cron组件)
在cron触发规则后追加周数判断逻辑,仅满足奇偶条件时才执行实际任务命令,以和Test1对齐的11:05触发时间为例:
- Test2(偶周周五执行)配置:
规则说明:05 11 * * 5 [ $(( $(date +\%V) \% 2 )) -eq 0 ] && /实际/Test2/执行命令路径- 前5位
05 11 * * 5保证每周五11:05触发一次调度 date +\%V返回当前ISO标准周数(以周一为周首,每年第一个周一所在周为第1周),对2取模等于0即为偶周,满足条件才执行后续命令- cron配置中
%属于特殊字符需要加反斜杠转义
- 前5位
- Test3(奇周周五执行)配置:
仅需将偶周判断的05 11 * * 5 [ $(( $(date +\%V) \% 2 )) -eq 1 ] && /实际/Test3/执行命令路径eq 0改为eq 1即可。
如果你的业务规则以周日为周首,将\%V替换为\%U即可
方案2:扩展cron/调度框架实现
如果你使用的是支持周数参数的调度组件(如fcron、Quartz等),可直接指定周数范围:
比如Quartz框架中Test2的表达式可写为:0 5 11 ? * FRI 2/2
代表每年第2周开始,每2周的周五11:05执行,Test3对应改为1/2即可,注意该方案需要处理跨年周数边界问题,通用性弱于方案1。
验证建议
正式配置前可先将执行命令替换为日志打印命令,验证2周确认调度符合预期后再替换为业务命令:
05 11 * * 5 [ $(( $(date +\%V) \% 2 )) -eq 0 ] && echo "Test2 触发 $(date)" >> /tmp/cron_test.log
内容的提问来源于stack exchange,提问作者fahad pirzada
相关产品推荐
相关产品推荐

