2015-06-26 72 views
2

多個inotify事件我有2臺機器在我們的數據中心:NFS服務器收到新的文件

setup

公共服務器暴露了內部服務器的存儲通過ftp的一部分。當文件上傳到FTP時,這些文件實際上會在內部存儲器上結束。但是當在內部服務器的存儲器上觀看inotify事件時,我注意到文件被分塊寫入,可能是由於客戶端的緩衝。內部服務器上的軟件監視inotify事件,以確定是否有新文件到達。但由於使用NFS編寫文件的方式,因此沒有辦法確定文件何時完成。是否有辦法告訴NFS客戶端只能在一個操作中寫入文件,或者是否有解決此問題的方法?

編輯:

我得到的內部服務器上的活動,上傳大約900 MB的文件時是:

./ CREATE big_buck_bunny_1080p_surround.avi 
# after the CREATE i get around 250K MODIFY and CLOSE_WRITE,CLOSE events: 
./ MODIFY big_buck_bunny_1080p_surround.avi 
./ CLOSE_WRITE,CLOSE big_buck_bunny_1080p_surround.avi 
# when the upload finishes i get a CLOSE_NOWRITE,CLOSE 
./ CLOSE_NOWRITE,CLOSE big_buck_bunny_1080p_surround.avi 
當然

,我可以聽CLOSE_NOWRITE事件,但閱讀inotify文檔說:

close_nowrite 
A watched file or a file within a watched directory was closed, after being opened in read-only mode. 

這與'文件完整'不完全相同。我看到的唯一解決方法是使用.part或.filepart文件,並將它們(一旦上傳)移動到原始文件名並忽略存儲監視器中的.part文件。缺點是我必須向客戶解釋這一點,如何使用.part進行上傳。很多ftp客戶端默認支持這個功能。

回答

0

基本上,如果要檢查寫入操作何時完成,請監視事件IN_CLOSE_WRITE

IN_CLOSE_WRITE當一個文件被關閉並被寫入時會被「解僱」。即使文件以塊傳輸,FTP服務器也只會在傳輸整個文件後關閉文件。

+0

我在我的原始問題中添加了事件,這表明這不起作用。 – dvrslype

+0

我只能看到** 1 **'IN_CLOSE_WRITE'事件。 (如預期)。你用*表示什麼意思不起作用*? – hek2mgl

+0

,因爲您可能沒有閱讀評論,它說我收到約250,000 MODIFY和CLOSE_WRITE事件。 – dvrslype

相關問題