2010-05-24 20 views
0

我正在創建一個腳本來處理用戶提供給我們的文件。一切都發生在同一UNIX系統(在Solaris 10上運行)將用戶輸入處理爲文件的策略

現在我們的設計是本

  1. 用戶將文件放入上傳目錄
  2. 腳本放在cron來每10分鐘運行內。
  3. 腳本會在上傳目錄中的文件,對其進行處理,刪除之後立即

由於歷史/遺留原因,#1不能改變。另外,處理後刪除文件是必需的。

我最關心的是併發性。在輸入文件仍在寫入時分析腳本運行的情況很可能會出現。在這種情況下,數據將會丟失,這顯然是不可接受的。

由於我們無法控制用戶選擇的放置輸入文件的方式,因此我們無法要求他們獲取文件鎖定。據我所知,只有在UNIX上的文件鎖建議。因此用戶必須選擇遵守它們。

我正在尋找有關處理此問題的最佳做法的建議。謝謝

回答

1

很明顯,所有最好的解決方案都涉及到客戶端提供某種觸發器,表明它已經完成上傳。這可能是第二個文件,在將文件寫入到階段目錄或REST Web服務之後,將文件移動到處理目錄。我會假設你無法控制你的客戶,也無法或不願改變他們的任何事情。

在這種情況下,你仍然有幾個選項:

  • 您可以使用一個非常簡單的啓發:檢查文件的大小,等待5秒鐘,檢查文件的大小。如果它沒有改變,那可能是好的。

  • 如果您擁有超級用戶權限,則可以使用lsof來確定是否有人打開此文件以進行寫入。

  • 如果你有權訪問處理上傳的東西(HTTP,FTP,一個複製文件的setuid腳本?),你當然可以在那裏放置觸發器。