2012-12-03 36 views
0

我已經在本地機器上掛載了一個NFS掛載(所以,我想我的機器是NFS客戶端)並且一個文件正在寫入NFS掛載NFS掛載的遠程計算機(NFS服務器)掛載。現在,在我從本地機器讀取數據之前,如何使用JAVA檢測到正在寫入遠程機器的文件已關閉?NFS客戶端鎖定當前正在寫入遠程NFS服務器的文件

或者,有沒有其他方法可以實現我想要的?

編輯:我也想提一下,我無法控制遠程NFS服務器。我只能以只讀模式安裝。

+1

直到遠程系統關閉文件並刷新數據,您將讀取舊數據。 – Petesh

+0

Petesh:我需要一種方法來確保正在寫入的文件在被NFS客戶端讀取之前已經關閉。我怎麼做? –

+0

您可以使用文件鎖定嘗試強制執行命令,但是,由於它是遠程文件協議,因此不能保證它將保持一致。 – Petesh

回答

1

正如您所說的,您無法控制NFS服務器,也無法更新NFS服務器上的文件,因此您可以做的不多。你唯一可以使用的事情是,當一個文件被更新時,它的修改時間被更新。這應該可用於您的Java客戶端使用File.lastModified()。如果您的應用程序記住上次修改日期,那麼您至少可以知道自上次讀取數據以來是否有要處理的數據。這絕對不是完美的。有競爭條件等,但取決於你的應用程序需要/確實做什麼,這可能就足夠了。您無法確定該文件是關閉還是在服務器上打開。

如果文件修改出現緩慢,也可以使用noac裝入選項進行裝載。雖然這會損害常規NFS客戶端的NFS性能,但如果您的計算機沒有在該驅動器上使用許多其他NFS文件,則它可能適用於您。參見「man nfs」。

作爲一個便箋,我看不到文件鎖定會有所幫助,因爲您沒有指出NFS服務器上的應用程序無論如何都使用鎖。

相關問題