Crontab – 安排我的备份

我想在每个星期五晚上做备份(不,这不是整个备份例程,只是其中的一部分)。 每周五晚上的备份将不会被覆盖,直到4周后。 因此,本质上来说,我有四个循环备份:第一周,第二周,第三周和第四周。

现在,我需要week1备份脚本每4周运行一次。 但是我也希望week2的脚本每四周运行一次。 我知道我可以告诉crontab执行每X周/天/小时/任何东西。 但是,如何设置这四个脚本实际上在不同的星期运行,我怎样才能避免在同一天晚上运行所有4个脚本,然后忠实地等待几个星期才能再次运行?

而不是devise这样复杂的备份例程,可以考虑使用Bacula,这是一个企业级免费开源软件。 Bacula非常灵活,可以以几乎任何您想要的方式自动执行备份工作。

即使您能够制作MANUAL解决scheme,也有许多缺点:

  • 跟踪错误将是一个大问题
  • 跟踪工作将是一个头痛的问题
  • 手动设置始终需要持续监视

最好的系统pipe理员是一个自动化一切,坐下来放松的人。

我认为坦率的答案是最好的,但按照你所描述的你可以有一个cronjob每周五备份,然后使用日志旋转保留最后四个副本。 或者find四周以上的备份。

另一种方法是:将复杂性放到脚本中,因为它比cron更能处理复杂的事情。 所以(假设bash):

  • 让你的cron作业每个星期五运行相同的脚本。
  • 修改你的脚本给你自从时代以来的模4:

(愚蠢的格式化问题,需要在这里放假文本)

 epochsecs=`date +%s` # second since epoch 

 weeknum=`expr $epochsecs / 86400 / 7 % 4` # weeks since epoch, modulo 4 
  • 使用该数字作为备份文件名的一部分。

    backupfile = /path/到/ backup /文件。$ WEEKNUM

  • 覆盖旧的备份文件。

    rm $ backupfile tar czvf $ backupfile / bunch / of /目录

或者,只需使用文件名后缀及其date:

 backupfile=/path/to/backup/file.`date +%Y-%m-%d` 

然后在您的脚本中运行一个查找将会删除超过28天的备份文件:

 find /path/to/backup -maxdepth 1 -ctime +28 -delete 

无论如何,不​​要让这个复杂的过程负担过重。 在脚本中处理它,这可能更好地处理复杂性。

两种select:

  • 安排一个脚本,每个星期五运行一次,跟踪上一次运行哪个作业,然后运行下一个作业。

要么:

  • 安排week1在当月的第1-7天运行,并且仅在星期五运行。
  • 安排week2在当月的第8-14天运行,并且仅在星期五运行。
  • … 等等。
  • 你会注意到这并不能给你一个完美的备份 – 有时候你会错过一周的备份(当天是29/30/31星期五)

这种形象正是为什么,尽可能自己做所有事情,你会最终通过使用一个适当的备份工具,如阿曼达或bacula 弗兰克build议进一步提前。