2012-11-15 221 views
0

我使用的NFS允許兩臺服務器兩個通過簡單的文本文件進行通信,但有時似乎讀取文本文件獲取信息的服務器讀取不完整的文件,然後因此崩潰。然後我去查看使其崩潰的「不完整」文件,並且文件已完成。讀取這些文件的服務器是否有可能在NFS完成寫入之前看到它們?我只使用linux的mv將它們從本地計算機移到NFS,只有它們完全寫入時,才能在NFS上「不應該」爲不完整狀態。NFS同步與異步

這個問題可能與同步vs異步有關嗎?現在我正在使用異步。根據我的理解,異步意味着你從寫入返回並且你的程序可以繼續運行,並且此寫入將在稍後發生。鑑於同步意味着您的流程將在繼續前繼續等待寫入。會改變同步解決這個問題嗎?還是有更好的方法來處理這個問題?我知道兩臺服務器可以通過數據庫進行通信,但我實際上是這樣做的,以儘量減少數據庫的使用。謝謝!

回答

1

mv跨文件系統轉換爲cp + rm並且當然不是原子的,即使沒有涉及NFS也是如此。您應該先將文件複製到目標文件系統中的臨時文件,然後將其重命名爲正確的名稱。例如,而不是:

$ mv myfile.txt /mnt/targetfs/myfile.txt 

做:

$ mv myfile.txt /mnt/targetfs/.myfile.txt.tmp 
$ mv /mnt/targetfs/.myfile.txt.tmp /mnt/targetfs/myfile.txt 

(這裏假定進程讀取文件忽略它,而它沒有正確的名稱)

+0

對不起,我沒在我的描述中沒有提到這一點,但這實際上是我已經做的,而且我仍然在解決這個問題。 – srchulo