如何檢查進程中是否仍在使用目錄

如何檢查進程中是否仍在使用目錄

我有一些共享目錄/path/to/dir。我正在該目錄上運行備份過程。該進程在伺服器 A 上運行,而我只能存取伺服器/path/to/dirB。

現在我在伺服器 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 用戶端)。

這樣你就不需要任何鎖定文件並且可以擁有多個消費者。如果應用程式終止(或伺服器重新啟動)後遺留舊的鎖定文件,則鎖定文件始終是失敗的潛在原因。

相關內容