我每周日都会运行一次每周备份,并且运行良好。 此外,我每个月的第一天都会运行一次新的每月备份,这意味着如果该月的第一天是星期日,我会获得双重备份。我的 crontab 文件:
* 0 1 * * backup_monthly.sh
* 0 2-31 * 0 backup_weekly.sh
我的期望是 backup_monthly 无论如何都会在每个月的第一天运行,而 backup_weekly 则每周日运行,除了 1 号周日
问题是在这种情况下 backup_weekly 每天都在运行
我做了一些研究,没有发现任何负面情况的发生。
如果您有什么想法,谢谢
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 [ "$(date +\%d -d tomorrow)" != "01" ] && your-command