2010-03-21 2 views
4

У меня есть проект, который зависит от некоторых других бинарных файлов для загрузки из Интернета при установке time.For это то, что я делаю, это:Как я могу возобновить загрузку в 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 сделать dowloading. .. Вы можете использовать libwww-perl (perldoc LWP) и иметь больше контроля над процессом загрузки.

Затем я заставлю вашу идею загрузки в «tmp» имя файла и переместите файл на успех.

Однако я думаю, вам нужно идти дальше и проверять целостность файлов. Выполнение хэша MD5 или SHA очень просто и соответствует загруженному тому, что вы ожидаете. У вас может быть короткий файл на сервере, содержащий контрольную сумму (filename.md5). Определите успех только тогда, когда у вас есть соответствие.

Обратите внимание, что улавливание всех сигналов и, как правило, попытка сделать процесс неудовлетворительным, а затем ожидать, что он сработал, в какой-то момент сработает. Может быть тайм-аут сети, сбоя, сбоя питания, проблемы с конфигурацией на сервере ... вы должны предполагать, что загрузка может завершиться неудачно, потому что они будут и кодируются так, чтобы ваш процесс мог восстановиться.

Наконец, вы не говорите нам, какие бинарные файлы вы загружаете и что вы делаете с ними. Поскольку вы используете wget, я собираюсь предположить, что вы работаете в Unix; вам следует подумать об использовании RPM + Yum или подобных, они справятся со всем этим для вас. На самом деле RPM легко писать.

1

использовать первый подход ..

  1. загрузить в "FileName" .tmp
  2. движение "FileName" .tmp к "FileName"
    ход! не копировать
  3. один раз за день очистить все файлы .tmp (паранойя рулез)
+0

ошибка !! я имел ввиду движение;) – sud03r

1

Вы можете использовать опции wget's -N и -c и удалить всю логику «если есть файл».

Смежные вопросы