我有一份crontab作业,工作时间为星期一至星期五,但我需要它来排除特定日期的例外情况,例如1月1日,4月11日等。

如何在crontab作业中做出该异常?

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

最佳答案

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


  man sh:AND和OR列表是分别由&&||控制运算符分隔的多个管道之一的序列。 AND和OR列表以左关联性执行。
  
  AND列表的格式为command1 && command2
  仅当command2返回退出状态为零时,才会执行command1
  
  OR列表的格式为command1 || command2。仅当command2返回非零退出状态时,才会执行command1


如果您想从自己的计划中排除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


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

关于linux - Crontab天异常(exception)Linux,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/48818748/

10-15 17:06