Heartbeat-мониторинг: как контролировать cron-задачи, бэкапы и скрипты

Heartbeat-мониторинг для cron-задач и бэкапов: как работают сигнальные ссылки «Старт/Стоп» и «Сигнал», пример curl в cron и уведомления о пропусках заданий.

Начеку3 мин чтения
Как работает heartbeat-мониторинг
Задача по расписанию

cron запускает задачу

Старт

GET /start/<токен>

Ожидание

сигнал должен прийти в пределах таймаута

stop — всё в порядке

Период тихий, без уведомлений

Нет сигнала — алерт

Уведомление в Telegram и Email

Есть класс задач, о которых узнают только когда случилась беда: ночной бэкап не выполнился, синхронизация остановилась, отчёт перестал приходить. Классический мониторинг сайта тут не поможет — сервер работает, а задача молча не запускается. Для таких сценариев придуман heartbeat-мониторинг (от англ. heartbeat — «сердцебиение»): задача сама сообщает сервису «я выполняюсь», а если сообщений нет слишком долго — приходит уведомление.

Как это работает

Идея простая. Вы получаете уникальную сигнальную ссылку и добавляете обращение к ней в свой скрипт или cron-задачу. Сервис ждёт сигналов с заданной периодичностью:

  • Сигнал пришёл вовремя — всё в порядке, ничего не происходит.
  • Сигнала нет дольше таймаута — вы получаете уведомление: задача не выполняется.

Так вы узнаёте о проблеме через минуты после пропуска, а не через недели, когда понадобится бэкап, которого нет.

Два режима: «Задача (старт/стоп)» и «Сигнал»

В Начеку доступны два типа heartbeat-мониторов.

Задача (старт/стоп)

Подходит для длительных задач: выгрузок, миграций, ночных отчётов. Скрипт сообщает о начале работы и о завершении:

curl -s "https://nacheku.com/start/ВАШ_ТОКЕН"
# длительная работа: выгрузка данных, генерация отчёта
curl -s "https://nacheku.com/stop/ВАШ_ТОКЕН"

Если задача началась, но не завершилась за отведённое время — придёт уведомление о «зависании». Полезно для задач, которые должны закончиться за известный срок.

Сигнал (одна ссылка)

Подходит для коротких регулярных событий: бэкапов, синхронизаций, проверок. Достаточно одного обращения по ссылке:

curl -s "https://nacheku.com/alert/ВАШ_ТОКЕН"

Если в заданный интервал сигнал не пришёл — уведомление о пропуске. Есть и варианты fail/ВАШ_ТОКЕН/1 для явной пометки ошибки и stop/ВАШ_ТОКЕН/2 с кодом завершения — при ненулевом коде придёт уведомление.

Пример: контроль ежедневного бэкапа

Допустим, у вас есть скрипт backup.sh, который запускается по cron каждую ночь. Добавляем heartbeat за три шага:

  1. Создайте монитор «Сигнал» и задайте интервал — например, 26 часов (с запасом на ночной запуск).
  2. В конец backup.sh добавьте строку curl -s "https://nacheku.com/alert/ВАШ_ТОКЕН".
  3. Готово. Если бэкап не выполнится — через 26 часов придёт уведомление.

Аналогично контролируются репликации, очереди, импорты и любые периодические процессы.

Что ещё контролируют через heartbeat

  • SSL-обновление — cron с certbot шлёт сигнал после успешного продления.
  • Мониторинг самого мониторинга — внешний скрипт проверяет внутренние демоны.
  • Обмен данными с партнёрами — синхронизация прайсов или остатков.
  • Планировщики внутри приложений — фоновые задачи шлют сигнал по завершении.

Почему это надёжнее «письма из cron»

Привычный способ — отправлять себе письмо из cron-задачи. У него три слабости: письмо приходит и когда всё хорошо (шум), почта сама может не работать, и никто не замечает, когда письмо не пришло. Heartbeat-контроль работает наоборот: тишина — это норма, а уведомление приходит только при проблеме. Плюс фиксируется история выполнений: видно, как часто задача запускалась и были ли пропуски.

Итог

Heartbeat-мониторинг превращает «надеюсь, бэкап выполнился» в «я знаю, что он выполнился». Одна строка с curl в вашем скрипте — и сервис контролирует расписание, уведомляя только о реальных проблемах. Создайте первый сигнальный монитор — настройка занимает пару минут, а спокойствие за бэкапы бесценно.

Проверьте свой сайт прямо сейчас

Бесплатная проверка займёт меньше минуты.