Cronator: когда cron начинает болеть
У каждого, кто немного занимается автоматизацией, в какой-то момент появляется папка со скриптами. Бэкапы баз данных, отчёты по расписанию, синхронизация данных, уведомления, чистка логов. Всё это работает через crontab — и работает нормально, пока не перестаёт.
Проблема с cron не в том, что он плохой. Проблема в том, что он молчит. Скрипт упал в три ночи с ошибкой импорта — ты об этом узнаешь утром, когда кто-то спросит, почему отчёт не пришёл. Или не узнаешь вообще. Добавляешь логирование в каждый скрипт — становится лучше, но теперь логи в пяти разных местах. Virtualenv не активировался — скрипт молча запустился с системным Python и упал на импорте. Два скрипта запустились одновременно — получил гонку данных.
Я смотрел в сторону Airflow и Prefect. Но это совсем другой масштаб: оркестраторы с DAG-ами, операторами, концепцией pipeline. У меня не пайплайны — у меня просто десяток скриптов, которым нужно надёжно запускаться по расписанию и сигнализировать, если что-то пошло не так.
Так появился Cronator.
Идея простая: веб-интерфейс для управления Python-скриптами по расписанию. Каждый скрипт живёт в своём изолированном virtualenv с выбранной версией Python. История запусков с stdout/stderr. Email-оповещение при падении. Защита от одновременных запусков. Всё в одном docker compose up.
Под капотом — FastAPI на бэкенде, React с Tailwind на фронтенде, APScheduler для расписания, PostgreSQL для хранения истории. Для изоляции скриптов используется uv — он создаёт virtualenv быстро и предсказуемо, без сюрпризов с путями.
git clone https://github.com/aa-blinov/cronator
cd cronator
docker compose up -d
Открываешь браузер, добавляешь скрипт, выставляешь cron-выражение — готово. Если упадёт, придёт письмо. История хранится, можно посмотреть что вывел скрипт и сколько времени занял.
Я не ставил цель сделать продукт. Ставил цель — перестать бояться, что скрипт упал и никто не знает. Теперь не боюсь.
Есть 19 встроенных шаблонов — мониторинг, бэкапы, уведомления, обслуживание данных. Если своих скриптов ещё нет, можно начать с них. Но обычно они уже есть — просто разбросаны по серверам без надзора.
Cronator заполняет конкретную нишу: больше чем cron, меньше чем Airflow. Для тех, у кого не DAG-и, а просто скрипты.
Есть и другой угол. Мы движемся в сторону мира, где автономные агенты сами ставят себе задачи и сами их исполняют. Cronator — это переходный этап: рутинное можно уже отдать на автоматизацию, а контроль над тем, что действительно важно, остаётся в руках через нормальный интерфейс. Не crontab в терминале и не чёрный ящик агента — а что-то посередине, где ты видишь что происходит и можешь вмешаться.