Linux

讓 cronjob 等待上一個 rsync 作業完成

  • February 21, 2019

我正在使用 rsync 將一些數據從一台伺服器備份到另一台伺服器。一切正常,但可能需要更長的時間才能完成,具體取決於要傳輸的數據量。

是否有任何保證的方法來確保 rsync 命令在前一個命令完成使用 cronjob 之前不會啟動?

例如,我每小時執行一次 rsync 命令,但傳輸可能需要超過 1 小時才能完成,因此下一個將在前一個完成之前開始。

您可以實現某種鎖定。這將列印仍在執行的 rsync 程序的數量:

pgrep -cx rsync

只有在不存在其他 rsync 程序時才會執行 rsync:

pgrep -cx rsync || rsync ...

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

您可以使用flock命令來幫助您執行此操作,例如在這種情況下flock -n可能是您想要的,因為如果它無法獲得鎖,它將導致命令立即失敗,例如

30 * * * *  /usr/bin/flock -n /tmp/myRsyncJob.lck /path/to/your/rsyncScript 

引用自:https://serverfault.com/questions/461306