在我/usr/local/bin/backup
每小时调用一次的脚本中,/etc/crontab
我使用rsync将数据复制到异地服务器。这一切都很好,即使在我们拥有的新数据比一个小时内可以推出的还要多的情况下也是如此。
上周有人在数据分区上复制了一个 11GB 的文件,当我第二天发现有 14 个 rsync 程序并行运行时,每个程序都没有带宽,并且每个程序都可能在处理同一个大文件。我将它们全部杀死(在意识到我应该保持第一个运行之前),停止 cron 作业并手动运行备份脚本。
我可以在启动 rsync 之前在脚本中写出一个文件,并检查脚本是否已经存在该文件以防止备份并行运行。有没有更简单的方法来做到这一点?
我的/etc/crontab
条目:
5 * * * * root /usr/local/bin/backup
Run Code Online (Sandbox Code Playgroud)
有不同的方法可以做到这一点,但 IMO 最简单的方法是在 crontab 文件中的命令之前插入 flock:
5 * * * * root flock -n /var/lock/backup /usr/local/bin/backup
Run Code Online (Sandbox Code Playgroud)
该/var/lock/backup
文件是 flock 使用的锁,-n
如果锁已经存在,则立即使命令失败。
这当然意味着如果一次备份需要 1 小时 1 分钟,那么下一次备份将在 59 分钟后开始。如果这是一个问题,您可以考虑使用-x
.