вторник, 19 декабря 2006 г.

Wget + Cron. Пример использования

Wget - это свободная неинтерактивная программа для загрузки файлов с Интернет. Поддерживает протоколы HTTP,HTTPS и FTP. Поскольку она неинтерактивная, то многие ее используют в фоновом режиме.

Cron - планировщик, демон в unix-подобных системах, используется для периодического выполнения разных задач.



Пример:

Есть сайт с большим количеством видео-файлов для скачивания. Но есть и условия скачивания:
1. Качать можно только по одному файлу за раз.
2. Для иностранных пользователей (вне РФ), время скачивания с 4 до 10 часов утра (московское время).

Первую проблему можно решить, используя Tor + Firefox.
Для решения второй, можно воспользоватся русским прокси. По ряду причин я этим пользоваться не хочу. Поэтому я хочу автоматизировать скачивание файлов wget-ом посредством cron.

Создаю у себя в домашней директории файл urls (название можно любое):

$ vi urls

и заношу в него urls файлов, которые я хочу качать (в моем случае, видео файлы)

http://***.net/film/lalala.cd1.avi
http://***.net/film/lalala.cd2.avi
http://***.net/film/lalala.cd3.avi
http://***.net/film/lalala.cd4.avi

(каждый новый url с новой строки).

Теперь создаю файл serhiy (название любое) и записываю в него действия для cron:

$vi serhiy

записываю

5 10 * * * /usr/bin/wget -c --directory-prefix=/home/serhiy --input-file=/home/serhiy/urls

Что значит начинать программу wget в 10 часов 5 минут, каждый день. Опция -с задает продолжение закачки недокачанного файла, --directory-prefix=/home/serhiy - место, куда записываем, --input-file=/home/serhiy/urls - файл с которого брать url's.

Создаем crontab файл.

$crontab serhiy

Все. Можно: проверить - командой crontab -l; редактировать - crontab -e; удалить crontab -r.

Очень полезно. Дал задание, через недельку в папке лежат все серии нужного фильма.

5 коммент.:

virens комментирует...

Интересно. Лично я чаще пользуюсь at, может быть просто потому, что лень читать man cron :-) Сейчас самая работа и делать это некогда, но на праздниках предамся этому сладостному делу :-)

serhiy комментирует...

Да, cron полезная штука. At меня не устраивал, с помощью at можно задать задание только одноразово, а мне надо чтобы оно каждый день работало без моего участия.

Анонимный комментирует...

Mikhail Gusarov <87bqm0zijr.fsf@vertex.dottedmag.net> пишет:

MR> Если я запускаю wget в скрипте, как мне узнать на выходе -
MR> докачал он файл или нет?

Если докачал - 0 вернёт, если не докачал - не ноль. Я его обычно в
такой конструкции пускаю (из-за того, что он имеет отвратительную
привычку по получении 503 останавливаться):

while ! wget -t0 -c url; do :; done

serhiy комментирует...

никогда не использовал -t. Опыта мало. Возьму на заметку.

Анонимный комментирует...

А вот мой способ объединения wget+cron (http://www.mysterya.org/2006/12/22/wget-cron/)