如何通过Cron job实现两个Linux脚本按天交替运行?
Cron定时交替运行两个脚本的实现方法
核心逻辑是通过判断当前日期对应的天数奇偶性,决定当天运行哪个脚本,共有两种常用实现方案:
方案1:直接在crontab中配置(无需额外写脚本)
如果你不需要复杂的额外逻辑,可以直接把判断条件写在crontab规则里,示例是每天凌晨2点交替执行两个脚本:
# 奇数天运行脚本1,偶数天运行脚本2,%在crontab中为特殊字符需要加反斜杠转义 0 2 * * * [ $(( $(date +\%d) % 2 )) -eq 1 ] && /绝对路径/到/你的/脚本1.sh 0 2 * * * [ $(( $(date +\%d) % 2 )) -eq 0 ] && /绝对路径/到/你的/脚本2.sh
如果要避免跨月/跨年时出现连续两天同奇偶的问题,把date +\%d替换为$(( $(date +\%s) / 86400 ))即可,该值为从1970年1月1日开始计算的累计天数,不会出现连续两天奇偶性相同的情况,可实现完全严格的隔日交替。
方案2:封装独立调度脚本(更易维护)
如果后续需要调整逻辑、加日志等操作,建议单独写一个调度脚本,步骤如下:
- 新建调度脚本
toggle_scheduler.sh,内容如下:
#!/bin/bash # 填写两个脚本的绝对路径 SCRIPT1="/opt/scripts/your_first_script.sh" SCRIPT2="/opt/scripts/your_second_script.sh" # 计算累计天数判断奇偶 total_days=$(( $(date +%s) / 86400 )) if [ $(( total_days % 2 )) -eq 1 ]; then # 奇数天运行脚本1 bash "$SCRIPT1" else # 偶数天运行脚本2 bash "$SCRIPT2" fi
- 给调度脚本加执行权限:
chmod +x /opt/scripts/toggle_scheduler.sh - 在crontab中添加单条定时规则即可:
0 2 * * * /opt/scripts/toggle_scheduler.sh >> /var/log/toggle_scheduler.log 2>&1
注意事项
- 所有脚本路径必须填写绝对路径,避免cron执行时因工作目录异常找不到文件
- 若脚本依赖特定环境变量,可在调度脚本开头先加载对应环境变量配置(比如
source /etc/profile) - 建议加日志输出配置,方便后续排查执行异常问题
内容的提问来源于stack exchange,提问作者Kerolos Youssef
相关产品推荐
相关产品推荐

