Heartbeat-мониторинг в Tracker.ru — это reverse-мониторинг: ваш cron-скрипт или фоновый процесс сам отправляет ping на наш сервер после успешного выполнения, и если ping не пришёл вовремя — приходит алерт. Это противоположность обычному uptime-мониторингу URL: там Tracker.ru дёргает ваш сайт и проверяет ответ; здесь — ваша задача сама говорит «я жива». Сервис мониторинга cron задач от Tracker.ru — это российская альтернатива healthchecks.io с heartbeat-мониторингом на русском, готовыми quickstart-сниппетами под cron, systemd, GitHub Actions и Laravel scheduler, и уведомлениями о пропуске cron в Telegram, MAX, Email и Webhook. Это полноценный heartbeat-мониторинг на русском — с интерфейсом, документацией, поддержкой и биллингом в рублях. Подробная инструкция по настройке — в документации /docs/features/heartbeat-monitoring.
Что такое heartbeat-мониторинг и зачем он нужен для cron-задач?
Обычный URL-мониторинг работает по pull-модели: Tracker.ru делает HTTP-запрос к вашему сайту с заданным интервалом и смотрит ответ. Это закрывает задачу проверки публичных страниц и API, но не работает для cron-задач: бэкап в три часа ночи нельзя «опросить снаружи», у него нет публичного эндпоинта. Чтобы убедиться, что задача выполнилась, нужен push-мониторинг cron — задача сама уведомляет сервис об успешном завершении.
Heartbeat-мониторинг (его же называют dead-man's-switch или cron-мониторинг) ровно это и делает: вы создаёте монитор в Tracker.ru, получаете уникальный токен и URL вида https://hb.tracker.ru/ping/{token}, и добавляете в cron-команду строчку с curl после основного действия. Если задача отработала — ping пришёл, монитор зелёный. Если задача упала, не запустилась, зависла или потеряла связь — ping не пришёл в срок, и Tracker.ru присылает уведомления о пропуске cron в Telegram, MAX, Email или Webhook.
Типовые сценарии: ночные бэкапы баз данных, выгрузки в S3 и rsync, ETL-пайплайны на Airflow или Dagster, очереди обработки задач (Laravel Horizon, Sidekiq, Celery), scheduled tasks из Laravel scheduler или Django celerybeat, расписания на стороне CI/CD (schedule: в GitHub Actions), регулярные отчёты для бизнеса. Для всех этих случаев push-мониторинг cron даёт прямой ответ на вопрос «отработала ли моя задача за последние сутки», без необходимости поднимать отдельный health-эндпоинт или парсить логи cron-демона.
Как Tracker.ru мониторит cron-задачи через ping?
Архитектура простая. На стороне Tracker.ru работает Go-сервис apiServer на поддомене hb.tracker.ru. Он принимает HTTP-запросы на GET https://hb.tracker.ru/ping/{token} (или POST для CI/CD-сценариев с body) и подтверждает, что монитор с этим токеном получил ping. Token — это 32-символьная hex-строка, привязанная к конкретному монитору в вашем аккаунте; токен генерируется при создании монитора и его не нужно держать в секрете в большинстве сценариев — даже если третья сторона вызовет ping, никакого вреда не будет, монитор просто получит лишнее подтверждение.
Опционально к ping можно прицепить короткое сообщение — ?msg=... в query-параметре или message=... в POST-форме. Сообщение ограничено 64 символами (это руны Unicode, а не байты — для кириллицы это до 128 байт UTF-8) и попадает в поле last_ping_message монитора. Удобно класть туда имя бэкап-файла, hostname сервера, exit-code или длительность джоба — это видно в /my/heartbeat/{id} и помогает разбираться постфактум.
Главные настройки монитора: period (как часто ваша задача должна слать ping), grace (сколько ждать сверх periоd прежде чем считать пропуск) и alert_after_misses (сколько подряд пропусков подряд перед алертом — защита от единичных флапов). Минимальный period зависит от тарифа: на Free — 5 минут (300 секунд), на Basic и Pro — 1 минута (60 секунд). Реалистичные значения для cron — от 5 минут до 24 часов; для каждого ping есть rate-limit 30 запросов в минуту на один токен (если ваш скрипт зациклится и начнёт слать ping каждые 100 миллисекунд, лишние запросы вернут 429).
Что произойдёт при пропуске: если за period + grace Tracker.ru не получил ни одного ping (с учётом alert_after_misses), монитор переключается в down, и в выбранные каналы летят уведомления о пропуске cron. История ping и каждой смены статуса сохраняется в /my/heartbeat/{id} — там же видно среднюю задержку, последние 7 дней uptime и текст последнего сообщения.
Как настроить heartbeat за 3 шага?
Подключить heartbeat-мониторинг к существующей cron-задаче — это пара минут. Никаких настроек на стороне сервера не требуется, нужен только доступ в личный кабинет Tracker.ru.
Шаг 1. Откройте /my/heartbeat, нажмите «Создать монитор». Заполните имя (например, nightly-backup), выберите период между ping (для большинства cron достаточно «1 час» или «1 день»), при необходимости укажите grace и alert_after_misses. Включите каналы уведомлений (Telegram, MAX, Email, Webhook) — они подтягиваются из общих настроек профиля.
Шаг 2. Tracker.ru сгенерирует токен и покажет URL вида https://hb.tracker.ru/ping/{token} (32-символьный hex-токен, уникальный для монитора). Скопируйте URL — он понадобится для cron-строчки.
Шаг 3. Добавьте в вашу cron-задачу curl после основной команды. Простейший вариант для bash — && curl -fsSL https://hb.tracker.ru/ping/{token}. Это значит: «если предыдущая команда вернула exit code 0 — отправь ping». Если основной скрипт упадёт, ping не уйдёт, и Tracker.ru через period + grace пришлёт уведомления о пропуске cron в Telegram, MAX, Email и Webhook.
Готовые шаблоны для четырёх популярных сценариев (cron, systemd timer, GitHub Actions, Laravel scheduler) — в следующем разделе и в документации.
Какие интеграции есть готовые?
Tracker.ru — сервис мониторинга cron задач, рассчитанный на типовые рабочие сценарии. Готовые quickstart-сниппеты ниже — это рабочие примеры, которые можно вставить в ваш проект как есть, заменив <token> на свой токен из /my/heartbeat.
Bash + cron. Самый частый случай — ночной бэкап или периодический отчёт через crontab -e. Конструкция && curl шлёт ping только при успешном завершении основной команды:
0 3 * * * /usr/local/bin/backup.sh && curl -fsSL https://hb.tracker.ru/ping/<token>
Флаги -fsSL важны: -f отключает HTTP-ошибки в stdout, -s глушит прогресс-бар, -S оставляет ошибки на stderr, -L следует за редиректами. Если cron-демон собирает stderr в почту, лишних писем от curl не придёт.
Systemd timer. Для современных Linux-серверов systemd timer часто заменяет cron. Ping добавляется через ExecStartPost в .service-файл — он выполнится только если основная команда вернула exit code 0:
[Service]
Type=oneshot
ExecStart=/usr/local/bin/backup.sh
ExecStartPost=/usr/bin/curl -fsSL https://hb.tracker.ru/ping/<token>
Парный .timer файл задаёт расписание (OnCalendar=daily), а сам ping управляется через основной service-юнит. Это удобно тем, что systemd сам логирует exit code в journalctl, и при пропуске ping видно по логам, упал ли скрипт или просто не запустился.
GitHub Actions. Для scheduled-workflow на GitHub Actions токен кладётся в secrets.TRACKER_PING_TOKEN, и ping добавляется как последний step. Если предыдущие steps упали, по умолчанию следующие skip'ятся — ping не уйдёт, и Tracker.ru засчитает пропуск:
on:
schedule:
- cron: '0 3 * * *'
jobs:
backup:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: ./scripts/backup.sh
- run: curl -fsSL https://hb.tracker.ru/ping/${{ secrets.TRACKER_PING_TOKEN }}
Если важно слать ping только при успехе предыдущего step — добавьте if: success() (это поведение по умолчанию). Если нужно слать ping всегда, в том числе после неудачи — if: always() (так делать не надо, иначе heartbeat потеряет смысл).
Laravel scheduler. В Laravel-проектах удобно использовать встроенный scheduler с хуком ->onSuccess() или ->after() — он вызывается строго после успешного выполнения команды:
$schedule
->command('backup:run')
->daily()
->onSuccess(fn () => Http::get(config('services.tracker.ping_url')));
В config/services.php положите tracker.ping_url со значением https://hb.tracker.ru/ping/{token} (через .env). При успешном запуске scheduler сам стрельнёт ping, при неудаче — нет.
Аналогично работают supervisord (event listener для PROCESS_STATE_RUNNING), Airflow (on_success_callback), Sidekiq, Celery и другие job-runner'ы. Подробные примеры с обработкой ошибок — в документации /docs/features/heartbeat-monitoring.
Чем подход Tracker.ru отличается от фокусных cron-сервисов?
В этой нише есть фокусные SaaS-сервисы, которые занимаются только cron-мониторингом. Это нормально — для конкретных команд они подходят лучше, для других — наоборот, удобнее иметь heartbeat в составе общей платформы. Без агитации, по фактам.
healthchecks.io — open-source SaaS по cron-мониторингу. Подтверждено: фокус продукта — cron jobs, scheduled tasks и server health checks; UI и документация на английском; биллинг в USD (бесплатный план + платные от 5 до 80 долларов в месяц); код опубликован под BSD-3 на GitHub (healthchecks/healthchecks), есть self-hosted вариант с Docker. Если вам нужен только cron-мониторинг, вы готовы работать с английским UI и биллингом в долларах — посмотрите healthchecks.io как фокусный SaaS, либо разверните self-hosted у себя.
cronitor.io — фокусный SaaS-сервис мониторинга cron-задач. Биллинг в USD, интерфейс на английском. Для команд, которые уже сидят на западных SaaS и не возражают платить долларами за фокусный продукт, — нормальный выбор.
cronbox.ru — российский сервис мониторинга cron-задач. Если вам нужен именно RU-фокусный продукт — посмотрите cronbox.ru как альтернативу, мы не будем агитировать против него.
Что Tracker.ru делает иначе. Heartbeat у нас — не отдельный продукт, а часть uptime-платформы. В одной подписке: URL-мониторинг с проверкой сайта из трёх стран (Россия, ЕС, Казахстан), SSL-мониторинг с алертами об истечении сертификата, screenshot-мониторинг с pixel-diff, maintenance windows, плюс heartbeat на тех же тарифах. Биллинг — в рублях, поддержка — на русском, интерфейс — на русском. Это удобно, когда у вас один сайт + несколько cron-задач + желание не разводить два сервиса с двумя биллингами.
Прямой призыв (нейтральный): если ваша задача — только cron-мониторинг, посмотрите перечисленные альтернативы, они хорошо это делают. Tracker.ru подойдёт, если хочется heartbeat плюс URL плюс SSL плюс скриншоты в одной подписке за рубли с русскоязычной поддержкой.
Часто задаваемые вопросы
Сколько стоит heartbeat-мониторинг?
Heartbeat включён во все тарифы Tracker.ru, отдельной платы нет. На бесплатном тарифе Free доступен 1 heartbeat-монитор (этого достаточно для одного pet-проекта или личного бэкапа), на Basic — 5 мониторов, на Pro — 20. Лимит — это количество одновременно активных мониторов, не количество ping в день: внутри одного монитора можно слать сколько угодно ping (с ограничением 30 запросов в минуту на токен — защита от лупа в скрипте).
Какой минимальный период между ping?
Минимальный period зависит от тарифа: Free — 5 минут (300 секунд), Basic — 1 минута (60 секунд), Pro — 1 минута (60 секунд). Это ровно те значения, которые прописаны в тарифной матрице — более коротких периодов в реальности нет, минимальный шаг для Basic и Pro — одна минута. К period добавляется grace (доп. время, в течение которого пропуск ping ещё не считается алертом). Реалистичные периоды для cron — от 5 минут до 24 часов: бэкапы обычно 1 раз в сутки, очистка очередей — раз в час, регулярные отчёты — несколько раз в день.
Как получать алерты только после N пропусков подряд?
В настройках монитора есть поле alert_after_misses — сколько раз подряд должен быть пропущен ping, прежде чем монитор переключится в down и пришлёт уведомление. Значение 1 означает «алерт после первого же пропуска» (агрессивно, но шумно), значение 2 или 3 — «алерт только после двух-трёх пропусков подряд» (защита от ложных срабатываний при кратковременных сетевых флапах или одиночных промахах cron). Для критичных задач (бэкапы, биллинг) лучше ставить 1; для шумных или часто фланглеющих — 2–3.
Как защитить ping от чужих запросов?
В Tracker.ru есть опциональная двухфакторная защита: auth_mode='token_and_secret' плюс header X-Heartbeat-Secret (constant-time compare на стороне Go-воркера). По умолчанию все мониторы создаются в режиме token_only — 32-символьный hex-токен сам по себе уже даёт достаточную защиту: его нельзя угадать переборо́м, и даже если третья сторона как-то его узнает, единственное, что она сможет — отправить лишний ping, что не вредит. Двухфакторка нужна, если у вас повышенные требования к безопасности (например, monitor триггерит side-effect в вашей инфраструктуре или вы держите токен в публичном репозитории). Включается в настройках монитора, secret хранится отдельно, отправляется в header — curl -H 'X-Heartbeat-Secret: <secret>' https://hb.tracker.ru/ping/<token>. Rate limit — 30 запросов в минуту на токен.
Что делать если ping не пришёл из-за моей ошибки в cron?
Алерт о пропуске cron всё равно придёт — Tracker.ru не различает, упал ли ваш скрипт по делу или из-за бага в обвязке. В /my/heartbeat/{id} будет видна вся история ping (когда последний раз приходил, с каким сообщением, из какого IP), и можно по таймштампам понять, в какой момент задача перестала отрабатывать. Recovery — следующий успешный ping: как только скрипт снова отработает и пришлёт ping, монитор перейдёт в up и в каналы уйдёт уведомление о восстановлении. Если ваша cron-задача просто легально не должна отработать в этот раз (например, на праздники или в окно maintenance) — поставьте монитор на паузу через /my/heartbeat/{id}, и алертов не будет до следующего возобновления.
Создать heartbeat-монитор — /sign-up. Подробная инструкция по настройке (включая supervisord, Airflow и ?msg= в примерах) — в документации /docs/features/heartbeat-monitoring. Сравнить тарифы — /pricing.