Инцидент: как мы сломали и восстановили сборщик тиражей
Что произошло
После нескольких успешных запусков сборщика api_collector.py мы начали активно вносить правки:
- добавили PaddleOCR,
- переписали логику восстановления сессии,
- добавили бесконечные циклы и аргументы
--daemon.
В результате скрипт перестал проходить капчу, а systemd-сервис падал с SIGTERM и EPIPE.
Корневая причина
Мы изменили проверенный временем модуль captcha_solver.py (заменили ddddocr на каскад из трёх OCR-движков) и нарушили логику обхода капчи в api_collector.py. Чем сложнее становился код, тем хуже он работал.
Как восстанавливали
- Остановили systemd-сервис, чтобы не мешал.
- Скопировали эталонные версии
api_collector.pyиcaptcha_solver.pyиз репозиторияdevops-portfolio/lottery-bot/, где лежала рабочая версия. - Запустили скрипт вручную — капча прошлась, тиражи начали собираться.
- Оставили работать в фоне через
nohupи настроили cron-сторож для автоматического перезапуска.
Выводы
- Не усложняй то, что уже работает.
- Эталонные версии критически важных скриптов должны быть в Git.
- Отдельный модуль для капчи позволяет экспериментировать без риска для основного кода.
INSERT OR IGNOREспасает от дубликатов и позволяет безопасно перезапускать сбор.
Текущее состояние
Сборщик работает стабильно. Капча обходится автоматически. Данные по 26 лотереям собираются в SQLite. Следующие эксперименты будем проводить в отдельных ветках.