我有一個通過FTP處理傳入文件的服務。APPE FTP命令傳輸完成檢測serverside
在安裝了Proftpd的Debian服務器上,我使用iNotify事件來確定文件傳輸何時完成,我可以開始使用它。
一旦文件不再寫入,就會觸發事件。
這很好,直到我發現新的尼康D4相機和WT-5無線發射器使用APPE FTP命令發送文件。
從我看過的內容看來,APPE FTP命令發送數據塊中的文件,這些文件在第一個塊創建文件後附加到服務器上的現有文件中。
但是,這會導致幾個iNotify事件被觸發,因爲該文件會在連接關閉之前幾次而不是一次。
由於文件在文件完成之前處理,它們將在處理完成後導致錯誤。而且我總是在處理後刪除文件。
由於我的這項服務必須保持快速處理傳入文件,我真的很喜歡iNotify這個解決方案,並且如果文件大小在n秒內保持不變,或者無論如何確定文件傳輸做完了。
我的問題是:有什麼辦法來確定文件傳輸是否實際完成,而不必檢查文件大小或比較最後修改日期?
我試圖找到一種方法來做到這一點在proftpd沒有用。
的xferlog中指出,同一個文件完成了幾次:
Fri May 11 14:15:41 2012 2 host-95-199-17-243.mobileonline.telia.com 131072 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:43 2012 2 host-95-199-17-243.mobileonline.telia.com 262144 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
Fri May 11 14:15:47 2012 3 host-95-199-17-243.mobileonline.telia.com 385624 /var/app/incoming/file.JPG b _ i r auser ftp 0 * c
末的C意味着轉移完成。
因此,如果我必須檢查文件是否實際上完成每個傳入的文件,這將意味着實際完成的文件不必要的延遲。
似乎這不應該是一個不尋常的問題,但無法找到任何有關它。
任何想法?
哪個事件你在聽在inotify的? – CagedMantis
我正在收聽IN_CLOSE_WRITE。 – JayLev