Как настроить 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-монитор и получить токен?
- Откройте
/my/heartbeatв личном кабинете Tracker.ru. - Нажмите «Создать монитор». Заполните:
- Имя — для поиска в списке (например,
nightly-backup-prod). - Период (period) — как часто задача должна слать ping. Минимум: на бесплатном плане — 5 минут, на платных — от 60 секунд. Реалистичные значения для cron — от 5 минут до 24 часов.
- Grace — дополнительное время сверх period, в течение которого пропуск ещё не считается алертом. Полезно при джобе с переменной длительностью.
- Alert after misses — сколько подряд пропусков должно случиться до отправки алерта. 1 — агрессивно, 2–3 — защита от ложных срабатываний.
- Имя — для поиска в списке (например,
- Подключите каналы уведомлений: Telegram, Email или Webhook. Каналы подтягиваются из общих настроек профиля.
- После сохранения 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.
Связанные
- Детальное сравнение с Healthchecks.io — фича-таблица, payload, миграция.
- Полная документация heartbeat-мониторинга — поля period/grace, опциональное
?msg=, двухфакторная защита, troubleshooting. - Продуктовая страница heartbeat-мониторинга — обзор для команды/менеджера.
- Настройка webhook-канала — алерты в PagerDuty/OpsGenie с HMAC-подписью.
- Окна обслуживания — как заглушить алерты на плановое ТО.