我想在每个星期五晚上做备份(不,这不是整个备份例程,只是其中的一部分)。 每周五晚上的备份将不会被覆盖,直到4周后。 因此,本质上来说,我有四个循环备份:第一周,第二周,第三周和第四周。
现在,我需要week1备份脚本每4周运行一次。 但是我也希望week2的脚本每四周运行一次。 我知道我可以告诉crontab执行每X周/天/小时/任何东西。 但是,如何设置这四个脚本实际上在不同的星期运行,我怎样才能避免在同一天晚上运行所有4个脚本,然后忠实地等待几个星期才能再次运行?
而不是devise这样复杂的备份例程,可以考虑使用Bacula,这是一个企业级免费开源软件。 Bacula非常灵活,可以以几乎任何您想要的方式自动执行备份工作。
即使您能够制作MANUAL解决scheme,也有许多缺点:
最好的系统pipe理员是一个自动化一切,坐下来放松的人。
我认为坦率的答案是最好的,但按照你所描述的你可以有一个cronjob每周五备份,然后使用日志旋转保留最后四个副本。 或者find四周以上的备份。
另一种方法是:将复杂性放到脚本中,因为它比cron更能处理复杂的事情。 所以(假设bash):
(愚蠢的格式化问题,需要在这里放假文本)
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:
要么:
这种形象正是为什么,尽可能自己做所有事情,你会最终通过使用一个适当的备份工具,如阿曼达或bacula 弗兰克build议进一步提前。