День падающих ботов
Сегодня был день падающих ботов. Проснувшись, обнаружил от GoRo сообщение, что SuperMon_Bot после вчерашнего обновления не работает. Пришлось бросить всё и лезть на сервер выяснять, в чём дело. Оказалось, кончилось место на диске из-за того, что слишком раздулись логи, и некуда было сохранять файл с id последнего запроса. Потом выяснилось, что бота то и дело перезапускает проверяющий скрипт, написанный самим GoRo, который считает насколько активно появляются новые строки в логе. Причём скрипт написан неэффективно и сжирает память и процессор гигабайтами. А после рестарта бот делал запись в логе об успешном старте, и лог рос ещё больше.
С этим быстро разобрались. Я немного доработал бота: во-первых, сделал обработку ситуации, когда в id последнего запроса пустая строка (раньше это вызывало цикл exceptionов, что опять же вело к переполнению лога), во-вторых, сделал счётчик, который увеличивается при ошибках и уменьшается при нормальной работе. И при превышении определённого значения процесс бота завершается с ненулевым кодом ошибки, чтобы его перезапустил systemd, чтобы избавиться от необходимости контролирующего скрипта.
Параллельно с этим выяснилось, что упал и мой VDS, на котором работает SiteKnockerBot. Но тут обошлось без ошибок с моей стороны, были проблемы с физическим сервером у хостера. Через пару часов всё заработало. Кстати, SuperMon_bot, после того, как его починили, даже отследил это и прислал уведомления (в нём есть и функция мониторинга других ботов).
Но к вечеру выяснилось, что хотя бот вроде работает, но лог продолжает расти. Посмотрев, что туда пишется, я увидел первопричину всех происшествий вообще. Оказывается, я обновления загрузил, а модуль dnstwist, нужный для их работы, установить забыл (хотя когда выгружал, крутил в голове «надо сделать вот это»). В результате GoRo добавил соответствующую проверку для тестирования, бот стал сыпать в лог сообщениями о том, что нет нужного модуля. И именно с этого всё и началось.
С этим быстро разобрались. Я немного доработал бота: во-первых, сделал обработку ситуации, когда в id последнего запроса пустая строка (раньше это вызывало цикл exceptionов, что опять же вело к переполнению лога), во-вторых, сделал счётчик, который увеличивается при ошибках и уменьшается при нормальной работе. И при превышении определённого значения процесс бота завершается с ненулевым кодом ошибки, чтобы его перезапустил systemd, чтобы избавиться от необходимости контролирующего скрипта.
Параллельно с этим выяснилось, что упал и мой VDS, на котором работает SiteKnockerBot. Но тут обошлось без ошибок с моей стороны, были проблемы с физическим сервером у хостера. Через пару часов всё заработало. Кстати, SuperMon_bot, после того, как его починили, даже отследил это и прислал уведомления (в нём есть и функция мониторинга других ботов).
Но к вечеру выяснилось, что хотя бот вроде работает, но лог продолжает расти. Посмотрев, что туда пишется, я увидел первопричину всех происшествий вообще. Оказывается, я обновления загрузил, а модуль dnstwist, нужный для их работы, установить забыл (хотя когда выгружал, крутил в голове «надо сделать вот это»). В результате GoRo добавил соответствующую проверку для тестирования, бот стал сыпать в лог сообщениями о том, что нет нужного модуля. И именно с этого всё и началось.