使 cronjob 等待上一个 rsync 作业完成

cho*_*ovy 11 linux rsync cron

我正在使用 rsync 将一些数据从一台服务器备份到另一台服务器。一切正常,但可能需要更长的时间才能完成,具体取决于要传输的数据量。

是否有任何保证方法可以确保 rsync 命令在上一个使用 cronjob 完成之前不会启动?

例如,我每小时运行 rsync 命令,但传输可能需要 1 个多小时才能完成,因此下一个将在前一个完成之前开始。

mga*_*iel 13

您可以实现某种锁定。这将打印仍在运行的 rsync 进程数:

pgrep -cx rsync
Run Code Online (Sandbox Code Playgroud)

并且只有在不存在其他 rsync 进程时才会运行 rsync:

pgrep -cx rsync || rsync ...
Run Code Online (Sandbox Code Playgroud)

使用-x将防止意外匹配不需要的名称(例如“fooba rsync hronizator”或“not_an_ rsync _totally” - 它的工作原理就像pgrep -c ^rsync$


use*_*517 13

您可以使用flock命令来帮助您执行此操作,例如在这种情况下flock -n可能是您想要的,因为如果无法获得锁定,它将导致命令立即失败,例如

30 * * * *  /usr/bin/flock -n /tmp/myRsyncJob.lck /path/to/your/rsyncScript 
Run Code Online (Sandbox Code Playgroud)