Cron 作业“if-unless”结构?

Cron 作业“if-unless”结构?

我想使用 cron 设置这个数据库备份例程:

  • 每月 1 号进行一次完整备份
  • 每周日都进行增量备份 - 除非是第一天
  • 每周的每一天都进行增量备份 - 除非是第一天或周日

数据库是 DB2,有人会好奇吗?“完整”表示完整,“增量”表示累积增量,“增量差异”表示“非累积增量”。最坏情况下的恢复方案是“完整 + 增量 + 6 个差异”。

这是我尝试过的:

# monthly
0  0  1     *  *    ("do full backup") 
# weekly
0  0  2-31  *  0    ("do incremental backup")
# daily
0  0  2-31  *  1-6  ("do incremental delta backup") 

... 希望第二行的意思是“在周日进行备份,但前提是日期在 2 号到 31 号之间”。事实证明,cron 不会对其时间参数进行 AND 运算,而是对其进行 OR 运算。因此,在 18 日星期二到 19 日星期三之间的午夜,每日和每周备份都已启动,无论当时是否是周日。顺便说一句,每日备份“先进行”,并阻止了每周备份。

现在,我可以调整时间,这样在一天中,每月备份总是在每周备份之前开始,在每日备份之前开始(例如 00.01、00.02 和 00.03),从而利用“阻塞”现象实现我的目标。不过,这很丑陋,而且我时不时会不得不处理实际上不是错误的错误输出(阻塞备份)。

此外,我可以将我的方案完全基于月份日期。但完整备份会严重消耗主机资源,因此我的用户会真的就像在周末运行完整备份。

有什么不需要编写脚本的建议吗?我希望将设置保持在非常基本的水平,以便于将来使用和理解。此外,不同的用户组会需要略有不同的备份策略,我不喜欢编写小差异的脚本。

问候,托尔斯滕

答案1

这个怎么样:

 # monthly
 0  0  1     *  *    ("do full backup") 
 # weekly or daily
 0  0  2-31  *  *    (if test `date +%u` -eq 7 then "do incremental backup" else "do incremental delta backup" ) 

相关内容