我需要一个cron
来跳过每个月的第一个星期六。我知道我们可以使用以下命令在特定日期运行,但有没有办法在每个月的特定日期跳过?
//每个月的第一个星期一运行
0 2 * * 1 [ date '+\%m' == date '+\%m' -d "1 week ago" ] || /path/to/command
答案 0 :(得分:0)
您的命令是二进制文件还是脚本? 如何在开头添加类似的东西:
[ $(date | awk '{print $1}') == "Sat" ] && exit 1 || { \
# your code here
...
}
答案 1 :(得分:0)
因为Cron似乎没有选择。 我会根据上述需要使用脚本。
**if [ $(date +%d) -le 7 ] && [ $(date +%u) -eq 1 ] ;**
[ $(date +%d) -le 7 ]
- 检查天数是否在一个月的前7天
[ $(date +%u) -eq 6 ]
- 检查日期是否等于星期六
感谢。
答案 2 :(得分:0)
以下在cron中工作(别忘了逃避%):
0 2 * * * [[ `date '+\%u'` -ne '6' && `date '+\%d'` -lt '8' ]] || [[ `date '+\%d'` -gt '7' ]] && /path/to/command
逻辑是:
另一种方法是反转逻辑:
0 2 * * * [[ ! ( `date '+\%u'` -eq '6' && `date '+\%d'` -lt '8' ) ]] && /path/to/command
逻辑是:
<强>
man 5 crontab
强>“six”字段(行的其余部分)指定要运行的命令。该行的整个命令部分,直到换行符或 一个“%”字符,将由/ bin / sh或cronfile的SHELL变量中指定的shell执行。除非使用反斜杠(\)进行转义,否则命令中的“%”字符将更改为换行符,并且第一个%之后的所有数据将作为标准输入发送到命令。