
我有一些共享目錄/path/to/dir
。我正在該目錄上運行備份過程。該進程在伺服器 A 上運行,而我只能存取伺服器/path/to/dir
B。
現在我在伺服器 B 上有一個 bash 腳本,它只能在備份過程完成時運行。因為我無法訪問其他伺服器,所以我正在考慮以下問題:
我可以檢查/path/to/dir
備份進程是否仍在使用,並且僅在該進程不再在目錄上運行時才運行我的腳本嗎?
我不知道知道它是共享目錄(NFS)是否重要。
答案1
更好的解決方案:在共享上建立一個鎖定文件,該鎖定文件僅在作業運行時存在,一旦該作業完成就會在伺服器 A 上刪除。
在伺服器 B 上,您只需檢查該檔案是否存在,如果存在,請等待它消失。
答案2
設定生產應用程式 A 建立文件,並且example_output.tar.gz.part
只有在確定一切都完成後,才重新命名為example_output.tar.gz
設定消費應用程式 B 忽略*.part
文件並處理所有不匹配的文件*.part
該方案是可識別的,因為它在許多消費者應用程式中使用(想到的是 Web 瀏覽器或 scp 用戶端)。
這樣你就不需要任何鎖定文件並且可以擁有多個消費者。如果應用程式終止(或伺服器重新啟動)後遺留舊的鎖定文件,則鎖定文件始終是失敗的潛在原因。