Как настроить heartbeat-мониторинг cron-задач

5 мин чтения
Обновлено 2 мая 2026

Как настроить heartbeat-мониторинг cron-задач

Чтобы поймать невыполнение cron, добавьте в скрипт строку curl -fsS https://hb.tracker.ru/ping/<token> после успеха. Tracker.ru пришлёт алерт в Telegram, если ping не приходит дольше выбранного интервала.

Что такое heartbeat-мониторинг и зачем он cron-задачам?

Heartbeat-мониторинг (также reverse-monitoring или dead man's switch) переворачивает обычную модель проверки. При URL-мониторинге сервер сам опрашивает ваш сайт по pull-модели. При heartbeat — наоборот: ваша cron-задача сама шлёт ping на сервер после успешного выполнения. Если ping не пришёл вовремя — Tracker.ru отправляет уведомление.

Эта модель закрывает класс задач, у которых нет публичного эндпоинта:

  • ночной бэкап БД, который пишет архив на S3;
  • ETL-пайплайн, который раз в час перекачивает данные из CRM в DWH;
  • очистка временных файлов раз в сутки;
  • скрипт ротации логов, синхронизация фотобанка, выгрузка прайс-листа.

Снаружи такие задачи «не видны» — мониторить их URL-проверкой нечем. Heartbeat решает проблему через push-сигнал.

На бесплатном плане доступен 1 heartbeat-монитор — этого хватает для одной критичной cron-задачи. Лимит на платных тарифах выше; полная матрица — на странице тарифов.

Как создать heartbeat-монитор и получить токен?

  1. Откройте /my/heartbeat в личном кабинете Tracker.ru.
  2. Нажмите «Создать монитор». Заполните:
    • Имя — для поиска в списке (например, nightly-backup-prod).
    • Период (period) — как часто задача должна слать ping. Минимум: на бесплатном плане — 5 минут, на платных — от 60 секунд. Реалистичные значения для cron — от 5 минут до 24 часов.
    • Grace — дополнительное время сверх period, в течение которого пропуск ещё не считается алертом. Полезно при джобе с переменной длительностью.
    • Alert after misses — сколько подряд пропусков должно случиться до отправки алерта. 1 — агрессивно, 2–3 — защита от ложных срабатываний.
  3. Подключите каналы уведомлений: Telegram, Email или Webhook. Каналы подтягиваются из общих настроек профиля.
  4. После сохранения Tracker.ru сгенерирует уникальный 32-символьный токен и покажет URL ping-эндпоинта вида https://hb.tracker.ru/ping/<token>. Сохраните URL — он понадобится для cron-строчки.

Полная документация по полям, опциональному параметру ?msg=, режиму token_and_secret для двухфакторной защиты и rate-лимитам — в обзорной статье про heartbeat-мониторинг.

Как добавить ping в cron-скрипт?

Принцип общий для любого scheduler'а: ping шлётся после успешного выполнения основной задачи, а не «всегда». Если задача упала, ping не уходит, и Tracker.ru через period + grace пришлёт алерт о пропуске.

Bash + crontab

Самый частый сценарий. Конструкция && curl шлёт ping только при exit code 0 от основной команды:

0 3 * * * /usr/local/bin/backup.sh && curl -fsSL https://hb.tracker.ru/ping/<token>

Флаги curl: -f отключает HTTP-ошибки в stdout, -s глушит прогресс-бар, -S оставляет ошибки на stderr, -L следует редиректам. Это не засорит почту от cron-демона лишними письмами.

С логированием результата ping в файл:

0 3 * * * /usr/local/bin/backup.sh && curl -fsSL https://hb.tracker.ru/ping/<token> >> /var/log/backup-ping.log 2>&1

Systemd timer

Для современных Linux-серверов systemd timer часто заменяет cron. Ping добавляется через ExecStartPost в .service-юнит — он выполняется только при exit code 0 от ExecStart:

# /etc/systemd/system/backup.service
[Unit]
Description=Nightly backup

[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
ExecStartPost=/usr/bin/curl -fsSL https://hb.tracker.ru/ping/<token>
# /etc/systemd/system/backup.timer
[Unit]
Description=Run backup nightly

[Timer]
OnCalendar=daily
Persistent=true

[Install]
WantedBy=timers.target

Логи доступны через journalctl -u backup.service.

GitHub Actions

Для scheduled-workflow токен кладётся в secrets.TRACKER_PING_TOKEN, ping добавляется как последний step. По умолчанию следующие steps skip'ятся при падении предыдущих — ping не уйдёт, и Tracker.ru засчитает пропуск:

name: Nightly backup
on:
  schedule:
    - cron: '0 3 * * *'

jobs:
  backup:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Run backup
        run: ./scripts/backup.sh
      - name: Heartbeat ping
        run: curl -fsSL https://hb.tracker.ru/ping/${{ secrets.TRACKER_PING_TOKEN }}

Не используйте if: always() для ping-step — это сломает heartbeat: ping будет уходить даже при падении задачи, и алерта не будет.

Что произойдёт, если cron не выполнится?

Tracker.ru ведёт счётчик ping для каждого монитора. Когда за period + grace ping не пришёл (с учётом alert_after_misses), монитор переключается в down и в выбранные каналы уходит уведомление:

🚨Heartbeat пропустил ping: nightly-backup-prod
Период: 1 час, grace: 10 минут
Последний ping: 2026-05-01 02:15:09

При следующем успешном ping монитор переходит в up, и приходит сообщение о восстановлении:

✅Heartbeat восстановлен: nightly-backup-prod
Был в down: 2 ч 15 мин

Чтобы валидировать, что связка работает (особенно при первой настройке) — закомментируйте cron на одну итерацию, дождитесь периода + grace и проверьте, что алерт пришёл в выбранный канал. После этого верните cron — придёт сообщение о восстановлении.

Если плановое обслуживание задерживает cron — оформляйте окно через maintenance windows. На время окна алерты не отправляются, ложного срабатывания не будет.

Для интеграций с внешними систимами инцидент-менеджмента (PagerDuty, OpsGenie, ваш собственный воркфлоу) подключайте webhook-уведомления — они подписаны HMAC-SHA256 и приходят на ваш HTTPS-эндпоинт с JSON-payload.

Чем Tracker.ru отличается от Healthchecks.io?

Healthchecks.io — мировой эталон для cron-monitoring, открытый по модели open-source с hosted-предложением. Tracker.ru закрывает аналогичный класс задач плюс несколько дополнительных:

  • URL-мониторинг и heartbeat в одном аккаунте. В Healthchecks.io heartbeat — единственный продукт. Tracker.ru объединяет в одной подписке URL-мониторинг, SSL-алерты, Apdex-мониторинг и heartbeat. Это удобно командам, которые ведут оба контура.
  • Регион мониторинга и юрлицо в РФ. Tracker.ru хостится в Москве, оплата проходит российской картой или счётом. Healthchecks.io — латвийская компания, оплата только иностранной картой.
  • Telegram + MAX как нативные каналы. Healthchecks.io шлёт через email/SMS/integration providers. Tracker.ru — нативный Telegram-бот (@tracker_ru_bot) и поддержка MAX-мессенджера, без внешних интеграторов.
  • Open-source self-hosted у Healthchecks.io vs SaaS-only у Tracker.ru. Если нужен self-hosted — Healthchecks.io остаётся опцией. Tracker.ru работает только из облака.

Полная фича-таблица и сравнение payload-формата — в детальном сравнении с Healthchecks.io.

Связанные