Задача такая.
Качаю репозитории Ubuntu, медленный интернет, поэтому скрипт дебмиррор иногда после закачки большого (около 10 мб) файла работает некорректно, выдавая
Timeout at /usr/share/perl/5.8/Net/FTP.pm line 503
WARNING: releasing 1 pending lock...
и просто завершается, что само по себе не так уж плохо, но чаще бывает вот такой случай:
[ 0%] Getting: pool/universe/b/boson-data/boson-data_0.13-1_all.deb
###################################################################################
###########################################################################################
Unable to close datastream at /usr/bin/debmirror line 1312
failed:Opening BINARY mode data connection for pool/universe/b/boson-data/boson-data_0.13-1_all.deb (17804030 bytes).
после чего пишет для всех файлов, естественно не закачивая их:
........
........
Download of pool/universe/z/zziplib/zziplib-bin_0.13.49-2_i386.deb failed:
Connection closed Download of pool/universe/z/zzuf/zzuf_0.8.1-1_i386.deb
failed: Connection closedFailed to download files (16452 errors)!
Поскольку не нашел как побороть эту проблему, не связанную с ошибкой в дебмиррор, описанную в этом форуме (стоит верная версия библиотек и дебмиррора, где эта ошибка уже исправлена) то сейчас убиваю и запуская скрипт закачки через два часа по крону, что само по себе не очень удобно, особенно когда прерывается закачка большого файла, а потом возобновляется снова, да и парсить пакеты дело небыстрое, отнимает время.
Есть идея использовать скрипт, который анализирует соединение с интернетом (у меня адсл 128 кбит по ethernet), и если скорость входящего трафика менее 12 кбит в секунду в течение более 10 минут, то скрипт закачки перезапускался бы.
В написании скриптов я еще неопытный, помогите пожалуйста с написание скрипта, реализующего данный анализ соединения и запуск скрипта при соблюдении указанных условий.
Или может кто то знает как побороть приведенные ошибки в работе дебмиррора. Поиск в инете мало чего дал.
привожу тексты скриптов запуска дебмиррора в данном случаю качаю часть universe репозитория:
#!/bin/bash -x
date +%Y.%m.%d-%T
/usr/bin/debmirror --nosource -m --passive --host=mirror.yandex.ru \
--root=ubuntu --method=ftp --progress \
--dist=gutsy,gutsy-security,gutsy-updates,gutsy-backports \
--ignore-release-gpg --section=universe \
--arch=i386 /media/sda7/REPOS/universe/
скрипт прописанный сейчас в кроне для запуска скрипта закачки:
#!/bin/sh
/home/fedor/mirroruniv.sh >>logmirror$(date +%Y.%m.%d-%T).txt
Поменял метод соединения с ftp на http.
Первое что заметил, это перестал работать индикатор процесса. Теперь выглядит так:
[ 0%] Getting: pool/universe/c/claws-mail/claws-mail-trayicon_2.10.0-3ubuntu3_i386.deb... ok
[ 0%] Getting: pool/universe/c/claws-mail/claws-mail_2.10.0-3ubuntu3_i386.deb...
Оставляю на ночь, посмотрим что выйдем из этого. Результаты доложу здесь. :-)
Результаты работы скрипта:
Стабильная работа в течение 12 часов. Подумал что вот оно счастье. И пусть скорость ниже на несколько долей кбайта, но большая стабильность работы скрипта это компенисирует. Без прогресс бара тоже можно жить.
Однако счастье не было бы полным, если бы не вылезла в результате вот такая ошибка, после чего скрипт завершился.
[ 3%] Getting: pool/universe/d/dict-gazetteer2k/dict-gazetteer2k_1.0.0-5_all.deb... ok
[ 3%] Getting: pool/universe/d/dict-misc/dict-easton_1.5A-1_all.deb... Transfer truncated: only 449966 out of 1122012 bytes received
WARNING: releasing 1 pending lock...
По поводу скрипта:
Можно в качестве информации о работе соединения использовать вывод данных программы iptotal, который выглядит так:
fedor@personal:~$ sudo iptotal eth0 -r 5
Total: 13.88 kBytes/s In: 13.26 Kbytes/s Out: 0.62 Kbytes/s
Тогда необходимо экспортировать вывод в файл, и проанализировать его с помощью какой нибудь утилиты, например awk (а вот в этом я не силен уже) и далее использовать полученную статистику в скрипте.
Единственно правильным в моем случае оказалось использование протокола rsync. Только в этом случае скрипт работал без вылетов с ошибкой и докачивал все полностью и корректно.