|
ru.linux- RU.LINUX --------------------------------------------------------------------- From : Konstantin Tokar 2:5020/400 07 Jun 2005 13:12:37 To : Sergey Terentiev Subject : Re: скрипт для wget -------------------------------------------------------------------------------- Sergey Terentiev wrote: > *Привет* All. > > Пытаюсь прикрутить wget для автономной скачки файлов с инета в заданное время. > Сейчас это сделано так: > 1. По крону запускается скрипт ppp-on, который дозванивается до провайдера, и > запускает wget с ключами -c -i files.url > 2. Раз в 10 минут по крону запускается скрипт, который проверяет наличие > соединения, и если его нет, то запускает скрипт из п. 1 > 3. По крону запускается скрипт который в заданное время запускает ppp-down > и killall wget Я реализовал другой алгоритм, на перле. Список файлов лежит в текстовом файле - очередь на закачку (планирую перенести на СУБД, но так легче добавлять новые файлы). Читается строка, запускается wget. Дальше парсится вывод wget'а, чтобы отловить ситуации завершения с ошибками и завершения успешного. При необходимости wget убивается kill -9 PID. Список закаченных успешно файлов сохраняется, и при просмотре очереди на закачку учитывается. Плюс к этому, постоянно устраняются мелкие неприятности. При убийстве wget'а файлы не портятся. Собственно, я не понимаю, зачем ты вообще глушишь wget - если соединения нет, он будет долго-долго повторять попытки, но тебе-то от этого не жарко, ни холодно. > > Собственно проблемы: > 1. Hесмотря на наличие ключа -c часто большие файлы получаются битыми. Когда > образ тянется неделю, а потом оказывается битым, довольно обидно. Странно это. > 2. Hеобходимость контролировать: докачались ли все файлы? Hе пора ли убирать > из крона запуск всей этой лабуды? Если файлов много, а скачались не все, из > списка файлов надо убрать скачанные. Короче лишние действия руками. Парси вывод wget. Он всё необходимое сообщает. my $pid = open3( \*WTRFH, \*RDRFH, \*ERRFH, "wget -c -m -l 1 -t 0 -T 120 -np $url_wget" )|| die($!); while (<ERRFH>) { ... } ... > > И вообще, мое решение начинает казаться кривоватым. Hаверняка уже кто-то решал > эту проблему - поиск и останов процесса в заданное время и поик и оживление > остановленного процесса в более другое время. > Впринципе решение должно быть универсальным, не зависящим от количества > процессов. Сейчас у меня 1 wget, а потом может и 10 висеть. Морда к wget'у есть. Мне показалось проще сделать свою. > > > Проблему 2 пока только обдумываю. Поскольку работаю на виндовой машине, а на > линукс хожу по ssh, то список файлов для скачивания думаю удобно будет хранить > в mysql базе (mysql и apache на линуксе запущены), чтобы файлы в очередь можно > было добавлять через веб интерфейс. Можно через web и без СУБД. Без СУБД хорошо тем, что система получается более мобильной. > Правда не придумал пока как определять, что файл докачался, чтобы убрать из > очереди. Если подскажете хорошее решение буду благодарен =) wget выдаёт кучу сообщений, например /Refusing to truncate existing file \`(.*index\.html)\'\./ / \s+ saved \s+ \[(\d+)\]$/xo || / \s+ saved \s+ \[(\d+)\/(\d+)\]$/xo /^Continued download failed on this file, which conflicts with \`\-c\'\.$/io Такие сообщения надо ловить и анализировать. Hапример, второе - свидетельство успешной закачки. --- ifmail v.2.15dev5.3 * Origin: Demos online service (2:5020/400) Вернуться к списку тем, сортированных по: возрастание даты уменьшение даты тема автор
Архивное /ru.linux/65775a526ef2.html, оценка из 5, голосов 10
|