You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何配置Cron实现每隔一个周六自动执行脚本?

每隔一个周六执行Cron定时任务的最优实现方案

你之前使用的10 22 1-7,15-21,29-31 * 6规则存在明显缺陷:部分月份的周六分布不符合这个日期范围规则,会出现多执行、漏执行的情况,且每年需要根据日历调整规则,维护成本极高。

以下是两种经过验证的稳定实现方案:

方案1:Cron定时+周数判断组合(全平台兼容)

这个方案兼容所有类Unix系统的原生Cron实现,无需额外依赖:

  • 首先基础Cron规则先设置为每周六固定触发,保留你需要的22点10分的执行时间
  • 再追加周数判断逻辑,只有匹配到奇偶周规则时才真正执行目标脚本
    如果你需要双周周六执行,完整Cron规则如下:
    10 22 * * 6 [ $((\$(date +\%W) \% 2)) -eq 0 ] && /path/to/your/script.sh
    
    如果你需要单周周六执行,把-eq 0修改为-eq 1即可。
    注意:Cron配置中的%必须加\转义,否则会被Cron识别为换行符导致执行失败
  • 参数说明:date +%W表示取当年的周数(每周从周一开始计算),如果你习惯以周日作为一周起始,可以替换为%U参数。
  • 跨年兼容优化:如果不想受每年年初周数重置的影响,可以改用天数取模的判断逻辑,只要首次触发是周六,之后就会永久每隔14天(一个双周周期)执行:
    10 22 * * 6 [ $(((\$(date +\%s) / 86400) \% 14)) -eq 0 ] && /path/to/your/script.sh
    

方案2:Systemd Timer(适用于带Systemd的Linux发行版)

如果你的服务器使用Systemd管理服务,可以直接用Timer单元实现,不需要处理Cron转义逻辑,规则更直观:

  1. 新建服务单元/etc/systemd/system/biweekly-sat.service,定义要执行的脚本:
[Unit]
Description=Run custom scripts every other Saturday
[Service]
Type=oneshot
ExecStart=/path/to/your/script.sh
  1. 新建对应的定时器单元/etc/systemd/system/biweekly-sat.timer:
[Unit]
Description=Biweekly Saturday execution timer
[Timer]
OnCalendar=Sat *-*-* 22:10:00
Persistent=true
AccuracySec=1s
OnUnitActiveSec=2w
[Install]
WantedBy=timers.target
  1. 加载配置并启动定时器:
systemctl daemon-reload
systemctl enable --now biweekly-sat.timer

该方案会从定时器启动的时间开始,严格每两周的周六触发一次任务。


内容的提问来源于stack exchange,提问作者Arun Kumar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.10 00:42:02