Amazon Linux 2中Crontab表达式异常触发问题求助
修正Cron表达式实现「指定日期范围且工作日」的触发逻辑
问题根源
Cron的日(day of month)和周几(day of week)字段默认是逻辑或关系:只要其中一个条件满足,任务就会执行。你写的* * 1-5,16-23 * 1-5会在「每月1-5/16-23日」或者「每周一至周五」时触发,所以14号(属于工作日)会被执行,不符合你的需求。
可行修正方案
方案1:脚本内添加日期判断(推荐)
用简单的cron表达式触发所有工作日的每分钟,然后在脚本开头加入日期范围校验,不符合则直接退出:
#!/bin/bash # 获取当前日期(当月第几天,不带前导零) current_day=$(date +%-d) # 判断日期是否在目标区间 if ! [[ ($current_day -ge 1 && $current_day -le 5) || ($current_day -ge 16 && $current_day -le 23) ]]; then exit 0 fi # 执行你的业务逻辑 # ...
对应的cron表达式简化为:
* * * * 1-5
方案2:拆分Cron表达式(纯Cron实现)
因为Cron不支持直接的逻辑与,我们可以把条件拆成两个独立的Cron规则,分别对应两个日期区间+工作日:
# 每月1-5日的周一至周五,每分钟执行 * * 1-5 * 1-5 # 每月16-23日的周一至周五,每分钟执行 * * 16-23 * 1-5
这两个规则组合后,只会在「日期在1-5/16-23日且是周一至周五」时触发任务,不会在14号这类仅满足工作日的日期执行。
内容的提问来源于stack exchange,提问作者Manish Parida
相关产品推荐
相关产品推荐

