2009-07-31 97 views
4

我有一個應用程序連續輪詢文件夾。一旦任何文件是ftp到文件夾,應用程序必須將此文件移動到其他文件夾進行處理。確認ftp是否完整?

在這裏,我們沒有任何選擇,以驗證FTP是否完整與否。

一個命令「lsof的」建議在技術論壇。它有一個文件描述列給出了文件狀態。

因爲,這是一個免費的BSD的命令,並在舊版本的Linux不存在,我想澄清這個命令的用法。

你們能告訴我們你在文件驗證經驗,還有沒有其他的替代解決方案可用?

此外,使用此實用程序是否有任何風險?

請提前感謝您的幫助。

感謝, 馬修禮居

回答

4

我們已經在許多不同的方式這樣做之前。

方法一:

如果你能控制的過程中發送文件,都將其發送文件本身後跟一個前哨文件。例如,發送真實文件"contracts.doc"後跟一個字節"contracts.doc.sentinel"

然後讓你的聽衆過程提防定點文件。當其中一個創建時,您應該處理等效的數據文件,然後刪除這兩個文件。

這一天以上老不具有相應的定點文件,擺脫它的任何數據文件 - 這是一個失敗的發射。

方法二:

保持自己對文件的眼睛(特別是最後修改日期/時間)。僅處理過去修改時間大於N分鐘的文件。這會增加處理文件的延遲時間,但您通常可以確定,如果文件在五分鐘內未寫入(例如),則完成。

結論:

兩種這些方法已經使用了我們成功的過去。我更喜歡第一個,但是當我們不允許更改發送文件的過程時,我們不得不使用第二個。

第一個的好處是你知道當哨兵文件出現時文件就緒。對於lsof(我假設你正在處理那些沒有被任何進程打開的文件作爲準備處理的時間)和時間戳,可能是FTP在中間崩潰,並且你可能正在處理一半文件。

+0

謝謝Pax。由於業務不想改變流程,因此我們遇到與第一種方法類似的問題。我決定採用第二種方法。 – 2009-07-31 10:43:28

1

這種問題通常有三種方法。

  1. ,這樣當你的文件傳輸,附加文件發送來標記傳輸的信號提供文件是完整的
  2. 該目錄中添加到日誌文件中的條目,以指示傳輸完成(此真的只在單個對等體更新目錄時才起作用,以避免併發性問題)
  3. 解析文件以確定完整性。例如該文件是以長度字段開頭還是顯然不完整?例如解析不完整的XML文件將導致解析錯誤,因爲缺少一個結束元素。根據您的文件的大小和格式,這可能是微不足道的,也可能非常耗時。

lsof將可能是一種選擇,儘管你已經確定你的Linux便攜性的問題。如果使用此選項,請注意-F選項,該選項將適合於由其他程序處理的輸出格式化,而不是人類可讀的。

編輯:大同發現了第四種方法我都忘了 - 使用的事實,文件的時間戳沒有更新的一段時間(!)。

+0

謝謝布賴恩的評論。但是,輸入文件的解析是一項乏味的任務,因爲它的格式和業務不會同意在過程的變化。 – 2009-07-31 10:45:22

0

還有第五種方法。您還可以檢查FTP會話是否仍處於活動狀態。如果每個對等端都有自己的ftp用戶帳戶,這將會起作用。只要用戶沒有從FTP註銷,假定文件不完整。