Crontab天例外Linux

时间:2018-02-16 01:07:21

标签: linux cron

我有一个crontab工作,从星期一到星期五工作,但我需要它来对特定日期例外,例如1月1日,4月11日等。

如何在我的crontab作业上创建该异常?

* * * * 1-5 ./full-backup

1 个答案:

答案 0 :(得分:0)

最简单的方法是使用andor列表序列。

  

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

任何其他脚本也可以以任何其他形式使用。