我有一个crontab工作,从星期一到星期五工作,但我需要它来对特定日期例外,例如1月1日,4月11日等。
如何在我的crontab作业上创建该异常?
* * * * 1-5 ./full-backup
答案 0 :(得分:0)
最简单的方法是使用and
或or
列表序列。
man sh
: AND和OR列表分别是由&&
和||
控制运算符分隔的一个或多个管道的序列。 AND和OR列表以左关联性执行。AND列表的格式为
command1 && command2
。 当且仅当command2
返回退出状态为零时才会执行command1
。OR列表的格式为
command1 || command2
。当且仅当command2
返回非零退出状态时,才会执行command1
。
如果您想从cron中排除2天,请说明1月1日和4月11日,那么您可以执行以下操作:
# .---------------- 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
* * * * 1-5 [ `date '+\%m\%d'` == "0101" ] || [ `date '+\%m\%d'` == "0411" ] || ./full_backup.sh
从你有更多日子排除它的那一刻起变得有点棘手。您可以使用较小的脚本,例如excludedaycmd
#!/usr/bin/env bash
while [[ $1 != "" ]]; do
[[ $(date "+%m%d" )) == $1 ]] && exit 1
shift
done
exit 0
如果任何参数适合一天,则此脚本将以1退出。你的cron看起来就像。
# .---------------- 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
* * * * 1-5 excludedaycmd 0101 0411 && ./full_backup.sh
任何其他脚本也可以以任何其他形式使用。