Подводные камни wgetа

Пост написан Сб, 14 марта 2009, 09:43
Использовать wget нужно осторожно нахуй!

Рассказываю историю:

У меня в движке блога есть понятие «отложенная запись» — т.е. я могу задать любой записи дату, когда она появится. Для некоторых проектов незаменимо — можно забить его при создании на 2-3 месяца вперед, а потом заниматься своими делами.

Так вот, чтобы при выборке записей небыло условий вроде `blog_posts`.`pubdate` <= CURDATE() (что достаточно медленно) я выбираю просто `blog_posts`.`status` = 'posted' (это enum-поле, и оно может быть waiting, posted или deleted) что быстро и удобно. Ну и до этого у меня уже во всех выборках (например предыдущий пост, следующий, случайный, итд) постов было условие `blog_posts`.`status` = 'posted', то и переписывать все выборки тоже было лень.

Разумеется, переодически приходится проверять поле pubdate и ставить всем записям которым наступило время показаться статус posted. Ну т.е. как переодически — раз в минуту. Ну т.е. как приходится — кроном.

Т.к. ssh у меня есть не ко всем возможным проектам, то кроновую часть решил написать в виде простой веб-странички, которую я буду запрашивать через крон wget'ом.

Ну я написал в кронтабе:
* * * * * wget http://rulezdev.com/cron/ 

и ушел довольный. Все работало, посты появлялись и никакой нагрузки это не создавалось.

ВНЕЗАПНО (через несколько месяцев) хостеры обращают внимание, что:

Wget охуел

Ёбанный пиздец! Я нихуя не понимаю, т.к. запрос там простейший, времени занимать много не может по определению, а уж даже если и занимает, то уж вешаться должен php или mysql, а не wget.
Тут-то я и обнаружил в home адов ад — сотни тысяч файлов вида index.html.42432
Сука-wget.

Файлов было настолько много, что:

[rulezzz@hosting ~]$ rm index.html.*
-bash: /bin/rm: Argument list too long


Ыхыхыххы.
Ну и соответственно, когда wget пытался найти следующее имя файла, ему приходилось делать стотыщ итераций по поиску следующего имени файда для вывода. Ну и он вис. Ад, какой ад.

Спасло положение изменение строки крона на:

wget -o /tmp/wget-dw.log -q -O /tmp/wget-content.log http://rulezdev.com/cron/ 


В общем, надо иметь ввиду, что если вгету явно не указать файл для вывода, то он начиает охуевать.
Тэги: wget