除周六外,我喜欢在所有工作日恢复跑步。
我的 crontab 条目
30 16 * * 1,2,3,4,5 ./backup.sh
这个条目工作正常。
另外,我喜欢在第一、第三个星期六恢复。
如果一个月内有第五个星期六可用,则应运行备份。 crontab 的条目是什么?我猜
30 16 1-7, 15-21, 29-31 * 6 ./backup.sh
我对吗?
我对吗?
不,你不正确。 crontab 手册指出:
Note:可以在以下两个字段中指定命令执行的日期一个月中的某一天, and 星期几。如果两个字段都受到限制(即不包含“*”字符),当任一字段与当前时间匹配时将运行该命令。例如,30 4 1,15 * 5
将导致命令在每月 1 日和 15 日以及每个星期五的凌晨 4:30 运行。
那么我们怎样才能做到呢?
如果你想确定是这个月的哪个星期六,即是这个月的第一个、第二个还是第三个星期六,你所要做的就是查看星期六是星期几,并进行以下整数计算:
D=$(date "+%d")
echo $(( (D-1)/7 + 1 ))
该值将返回相应的数字。这不仅适用于周六,而且适用于任何工作日。
由于 OP 希望 cron 在第 1 个、第 3 个、可能第 5 个星期六工作,因此它实际上声明 cron 在每个奇数星期六运行:
D=$(date "+%d")
echo $(( ((D-1)/7 + 1) % 2 ))
将此作为附加测试,允许我们将 cron 编写为:
# Example of job definition:
# .---------------- minute (0 - 59)
# | .------------- hour (0 - 23)
# | | .---------- day of month (1 - 31)
# | | | .------- month (1 - 12) OR jan,feb,mar,apr ...
# | | | | .---- day of week (0 - 6) (Sunday=0 or 7)
# | | | | |
# * * * * * command to be executed
30 16 * * 6 (( (($(date "+\%d") - 1)/7 + 1) % 2 == 1 )) && command
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)