Crontab——安排我的备份

Crontab——安排我的备份

我想每周五晚上进行一次备份(不,这不是整个备份程序,只是其中的一部分)。每周五晚上的备份直到 4 周后才会被覆盖。因此,本质上,我有四个循环备份:第 1 周、第 2 周、第 3 周和第 4 周。

现在,我需要每 4 周运行一次 week1 备份脚本。但我还希望每 4 周运行一次 week2 脚本。我知道我可以告诉 crontab 每 X 周/天/小时/等等执行某项操作。但是,我该如何设置它,以便这四个脚本实际上在不同的星期运行,我如何避免所有 4 个脚本在同一个晚上运行,然后恭敬地等待几周才全部再次运行?

答案1

与其设计如此复杂的备份程序,不如考虑使用 Bacula,它是一款企业级免费开源软件。Bacula 非常灵活,几乎可以以您想要的所有方式自动执行备份任务。

即使你能够做出手动解决方案,它也存在许多缺点:

  • 跟踪错误将是一个大问题
  • 追踪工作将会很麻烦
  • 手动设置始终需要持续监控

最好的系统管理员是能够自动化所有事情,然后自己就可以放松下来的人。

答案2

我认为 Frank 的回答是最好的,但要按照你描述的方法,你可以使用 cronjob 每周五进行备份,然后使用 log rotate 保留最后四份副本。或者使用 find 查找任何超过四周的备份。

答案3

另一种选择是:将复杂性放入脚本中,因为它比 cron 更能处理这种复杂性。因此(假设是 bash):

  • 让你的 cron 作业每周五运行相同的脚本。
  • 修改脚本,以便得到自纪元以来周数的模数 4:

(愚蠢的格式问题,需要在这里放置虚拟文本)

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

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

    备份文件=/路径/到/备份/文件.$weeknum

  • 覆盖旧的备份文件。

    rm $备份文件 tar czvf $备份文件 /bunch/of /目录

或者,只需使用带有日期的文件名后缀:

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

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

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

无论如何,不​​要让 cron 承担过多的复杂性。在脚本中处理它,它可能能够更好地处理复杂性。

答案4

两种选择:

  • 安排一个脚本每周五运行,跟踪上次运行的作业并按顺序运行下一个作业。

或者:

  • 安排第 1 周在每月的第 1-7 天运行,并且仅在星期五运行。
  • 安排第 2 周在每月的第 8 至 14 天运行,并且仅在星期五运行。
  • ... 等等。
  • 你会注意到,这并没有给你一个完美的备份 - 有时您会错过一周的备份(当第 29/30/31 天恰逢星期五时)

这种想法正是为什么乐趣因为一切都是自己做的,所以使用合适的备份工具(如 amanda 或 bacula)会更有帮助。弗兰克建议

相关内容