Про cron и божественную рекурсию
2006-08-23 11:24 amРаз уж в предыдущих комментариях затрагивалась тема божественности рекурсии, расскажу я вам баечку про рекурсию.
Начиналась история достаточно безобидно.
Жил да был некий администратор. И в служебные обязанности ему вменялось следить за нормальной работой N важных систем. В какой-то момент, когда систем стало N+1, он задумался о том, что надо как-то облегчать свою жизнь.
Например, сделать так, чтобы его уведомляли о самых страшных и приоритетных проблемах SMS-ами на его мобильный телефон.
Сказано - сделано, благо администратор работал в компании, предоставляющей услуги мобильно связи, и организовать email2sms ему было - раз плюнуть.
И вот уже написан скрипт, который мониторит /var/log/* на предмет критических ошибок. Скрипт написан на perl, весь ощетинился regexp-ами, красота неописуемая.
Долго ли, коротко ли, приходит конец рабочего дня. Администратор прописывает скрипт в cron, с запуском раз в минуту и идет домой.
И надо же такому было случиться, что именно в эту ночь на одной из подшефных систем случается какой-то сбой - кажется, место в /var закончилось. Монитор дискового пространства пишет об этом запись в syslog. Скрипт-уведомитель уже тут как тут - отсылает администратору SMS, пишет об уведомлении запись в свой лог. Точнее, пытается - места-то нет. А это ошибка в работе скрипта, о которой тоже надо уведомить администратора по SMS!
Через минуту все повторяется. И еще раз. И еще раз. И еще много, много раз. А надобно заметить, что особенность системы коротких сообщений сети GSM в том, что телефон может одномоментно принять и хранить ограниченное количество сообщений. В те далекие времена новые SMS-ы хранились только на SIM-карте, и помещалось их туда от силы 10.
После того, как администратору пришло 10 SMS-ов и буфер в SIM-карте забился, все остальные SMS-ы стали накапливаться на SMSC (центре доставке SMS), пока и там не закончилось место для очереди SMS-ов для одного конкретного абонента. Тогда письма стали накапливаться в очереди sendmail-а на том сервере, с которого посылались уведомления.
А утром пришел администратор, постучал по скрипту и сказал: "Горшочек, не вари".
Впрочем, к этому моментуманной каши уведомлений уже было сгенерировано на пол-года вперед. Хорошая новость заключалась в том, что очередь sendmail-а можно было просто почистить. Плохая новость заключалась в том, что почистить очередь на SMSC не представлялось возможным.
Администратор попробовал удалять SMS-ы на телефоне, но вместо них сразу же приходили новые, точно такие же.
Пришлось ему ждать 5 суток, пока SMS-ы на SMSC не протухли и не распались на 100% recyclable электроны.
Мораль басенки: организовывая рекурсию, не забывай про организацию грамотной базы :)
Начиналась история достаточно безобидно.
Жил да был некий администратор. И в служебные обязанности ему вменялось следить за нормальной работой N важных систем. В какой-то момент, когда систем стало N+1, он задумался о том, что надо как-то облегчать свою жизнь.
Например, сделать так, чтобы его уведомляли о самых страшных и приоритетных проблемах SMS-ами на его мобильный телефон.
Сказано - сделано, благо администратор работал в компании, предоставляющей услуги мобильно связи, и организовать email2sms ему было - раз плюнуть.
И вот уже написан скрипт, который мониторит /var/log/* на предмет критических ошибок. Скрипт написан на perl, весь ощетинился regexp-ами, красота неописуемая.
Долго ли, коротко ли, приходит конец рабочего дня. Администратор прописывает скрипт в cron, с запуском раз в минуту и идет домой.
И надо же такому было случиться, что именно в эту ночь на одной из подшефных систем случается какой-то сбой - кажется, место в /var закончилось. Монитор дискового пространства пишет об этом запись в syslog. Скрипт-уведомитель уже тут как тут - отсылает администратору SMS, пишет об уведомлении запись в свой лог. Точнее, пытается - места-то нет. А это ошибка в работе скрипта, о которой тоже надо уведомить администратора по SMS!
Через минуту все повторяется. И еще раз. И еще раз. И еще много, много раз. А надобно заметить, что особенность системы коротких сообщений сети GSM в том, что телефон может одномоментно принять и хранить ограниченное количество сообщений. В те далекие времена новые SMS-ы хранились только на SIM-карте, и помещалось их туда от силы 10.
После того, как администратору пришло 10 SMS-ов и буфер в SIM-карте забился, все остальные SMS-ы стали накапливаться на SMSC (центре доставке SMS), пока и там не закончилось место для очереди SMS-ов для одного конкретного абонента. Тогда письма стали накапливаться в очереди sendmail-а на том сервере, с которого посылались уведомления.
А утром пришел администратор, постучал по скрипту и сказал: "Горшочек, не вари".
Впрочем, к этому моменту
Администратор попробовал удалять SMS-ы на телефоне, но вместо них сразу же приходили новые, точно такие же.
Пришлось ему ждать 5 суток, пока SMS-ы на SMSC не протухли и не распались на 100% recyclable электроны.
Мораль басенки: организовывая рекурсию, не забывай про организацию грамотной базы :)
(no subject)
Date: 2006-08-23 08:51 am (UTC)Аффтор, пиши ищщо !
(no subject)
Date: 2006-08-23 09:02 am (UTC)тут скорее крон, а не рекурсия :)
(no subject)
Date: 2006-08-23 09:48 am (UTC)Кстати, достаточно классическая ситуация: обработчик ошибки генерирует очередную (если не такую же) ошибку...
(no subject)
Date: 2006-08-23 09:58 am (UTC)а когда ошибка породила ошибку и села ждать следующего запуска из крона - то это псевдо-рекурсия имхо.
(no subject)
Date: 2006-08-23 01:40 pm (UTC)Надо было по свежим следам записывать, но это было в прошлом веке :)
(no subject)
Date: 2006-08-23 09:34 am (UTC)(no subject)
Date: 2006-08-23 10:16 am (UTC)(no subject)
Date: 2006-08-23 10:41 am (UTC)(no subject)
Date: 2006-08-23 01:13 pm (UTC)есть ещё мораль: на mission-critical системах располагай /var/log на отдельном partition'е
(no subject)
Date: 2006-08-23 02:18 pm (UTC)Тетя Таня (С) Татьяна Владимировна (АССОИУ КПИ, кто знает тот поймет), всегда говорила "осторожней с рекурсией, память ограничена"....
(no subject)
Date: 2006-08-23 07:49 pm (UTC)(no subject)
Date: 2006-08-28 01:12 pm (UTC)(no subject)
Date: 2006-08-23 06:09 pm (UTC)(no subject)
Date: 2006-08-24 07:23 am (UTC)(no subject)
Date: 2006-08-24 07:24 am (UTC)(no subject)
Date: 2006-08-24 10:14 am (UTC)(no subject)
Date: 2006-08-24 11:23 am (UTC)(no subject)
Date: 2006-08-24 12:22 pm (UTC)(no subject)
Date: 2006-08-24 02:46 pm (UTC)