Как мониторить cron-задачу

Cron-задачи падают тихо. Heartbeat-мониторинг превращает пропущенный запуск в оповещение. Настройка для cron, таймеров systemd, Kubernetes и GitHub Actions.

Проблема cron в том, что при сбое ничего не происходит. Ни одна страница не падает, ошибка не показывается; бэкапа просто нет, когда он нужен.

Паттерн heartbeat

Дайте каждой задаче уникальный URL. Задача вызывает его при успешном завершении. Монитор ожидает вызов каждые N часов; если он опаздывает, вы получаете оповещение.

Cron

0 3 * * * /usr/local/bin/backup.sh && curl -fsS -m 10 https://hb.uptimepush.com/p/TOKEN

Таймеры systemd

Добавьте ExecStartPost=/usr/bin/curl -fsS https://hb.uptimepush.com/p/TOKEN в service-юнит.

Kubernetes CronJob

Добавьте вызов curl к команде контейнера через &&, чтобы он выполнялся только при успехе.

GitHub Actions

Добавьте финальный шаг, который вызывает URL через curl, а токен храните в секретах.

Льготный период

Задайте льготный период чуть длиннее самого долгого нормального выполнения задачи, чтобы медленная ночь не поднимала вас по тревоге.

Ваш сайт не спит. Теперь можете вы.

Начните мониторинг за пару минут. Первые 10 мониторов — за наш счёт.

Начать бесплатно — без карты ↗