2010-03-21 82 views
4

我有依賴於其他一些二進制文件的一個項目從網上下載的時間。對於這個在安裝我做的是什麼:如何恢復Perl下載?

if (file-present-in-src/) 
    # skip that file 
else 
    # use wget to download the file 

這種方法的問題是,當我打斷下載在中間,並在下次調用腳本時,部分下載的文件也會被跳過(這是不期望的),我也想讓wget繼續下載部分下載的文件。

我應該如何去了解它: 可能的解決方案我能想到的:

  1. 讓文件下載到一些文件說download_tmp。如果成功,移至原始文件 。
  2. 處理SIG {'INT'}來編寫適當的清理代碼。

但所有這些可以幫助恢復部分文件下載,

任何見解?

回答

3

拳,我不明白這是什麼都有用Perl做,因爲你使用wget做你下載過。 ..你可以使用libwww-perl(perldoc LWP)並對下載過程有更多的控制。

然後,我將您的想法下載到「tmp」文件名,並在成功時移動文件。

但是我認爲你需要進一步驗證文件的完整性。做一個MD5或SHA哈希非常簡單,並將下載的內容與您所期望的內容進行匹配。您可以在包含校驗和(filename.md5)的服務器上擁有一個短文件。只有當你有一場比賽時才確定成功。

請注意,捕獲所有信號並且通常試圖使進程不可運行,然後期望它已經運行必然會在某個點或另一個點失敗。可能存在網絡超時,崩潰,電源故障,服務器上的配置問題......您應該承擔下載操作可能會失敗的原因,因爲它們會進行編碼,以便您的進程能夠恢復。

最後,你不告訴我們你正在下載什麼樣的二進制文件,以及你在做什麼。既然你使用wget,我會假設你在Unix上;你應該考慮使用RPM + Yum或者類似的東西,他們會爲你處理所有這些事情。 RPM很容易編寫,真的。

1

使用第一種方法..

  1. 下載到 「文件名」 的.tmp
  2. 移動 「文件名」 的.tmp爲 「文件名」
    招!不可複製
  3. 按日一次清理掉所有.tmp文件(偏執rulez)
+0

錯誤!我的意思是移動;) – sud03r 2010-03-21 12:32:09

1

您可以使用wget的-N-c選項並刪除整個「if file exists」邏輯。