如何每个星期日运行 crontab,除了每月的第一天

问题描述 投票:0回答:2

我每周日都会运行一次每周备份,并且运行良好。 此外,我每个月的第一天都会运行一次新的每月备份,这意味着如果该月的第一天是星期日,我会获得双重备份。我的 crontab 文件:

* 0 1 * * backup_monthly.sh
* 0 2-31 * 0 backup_weekly.sh

我的期望是 backup_monthly 无论如何都会在每个月的第一天运行,而 backup_weekly 则每周日运行,除了 1 号周日

问题是在这种情况下 backup_weekly 每天都在运行

我做了一些研究,没有发现任何负面情况的发生。

如果您有什么想法,谢谢

cron
2个回答
0
投票
0 0 * * * ([ "$(date +\%d)" = "01" ] || [ "$(date +\%a)" = "Sun" ]) && backup_monthly.sh

这是什么意思?

  • 0 0 * * *
    表示 cron 作业将在每天凌晨 12:00(午夜)运行。

  • ([ "$(date +\%d)" = "01" ] || [ "$(date +\%a)" = "Sun" ])
    由两部分组成。

    • [ "$(date +\%d)" = "01" ]
      检查当月的当前日期是否为
      01

    • [ "$(date +\%a)" = "Sun" ]
      检查当前星期是否为
      Sun

  • && backup_monthly.sh
    指定将要执行的命令。

因此,cron 作业安排在每天 12:00 运行 AM,但只有在以下情况下才会执行备份命令 该月的

1st day
Sunday


0
投票

用这个

0 0 * * 0 [ "$(date +\%d -d tomorrow)" != "01" ] && your-command

© www.soinside.com 2019 - 2024. All rights reserved.