Чтобы мониторить cron в Linux и ловить пропуски, добавьте в скрипт строку curl -fsS https://hb.tracker.ru/ping/<token> после успешного выполнения. Если задача не отработала и ping не пришёл за заданный интервал — Tracker.ru пришлёт алерт в Telegram.
Зачем мониторить cron-задачи на сервере
Cron запускает задачу по расписанию, но молча: если скрипт упал, завис или сервер перезагрузился — вы об этом не узнаете, пока не хватитесь результата. Мониторинг cron-задач решает это через обратную проверку (heartbeat, или dead man's switch): задача сама шлёт сигнал после успешного выполнения, а сервис следит, что сигнал приходит вовремя. Нет сигнала в срок — приходит алерт.
Эта модель закрывает класс задач, у которых нет публичного эндпоинта:
- ночной бэкап БД, который пишет архив на S3;
- ETL-пайплайн, который раз в час перекачивает данные из CRM в DWH;
- очистка временных файлов раз в сутки;
- скрипт ротации логов, синхронизация фотобанка, выгрузка прайс-листа.
Снаружи такие задачи «не видны» — мониторить их URL-проверкой нечем. Heartbeat решает проблему через push-сигнал.
На бесплатном плане доступен 1 heartbeat-монитор — этого хватает для одной критичной cron-задачи. Лимит на платных тарифах выше; полная матрица — на странице тарифов.
Как мониторить cron в Linux: пошагово
Проверить, что планировщик Linux реально отрабатывает задачи, можно за три шага:
- Заведите монитор и получите персональный ping-URL вида
https://hb.tracker.ru/ping/<token>. - Допишите
&& curl -fsS <ping-URL>в конец cron-строки илиExecStartPostдля systemd timer — ping уйдёт только при успешном выполнении. - Укажите ожидаемый интервал. Если ping не пришёл вовремя, сервис считает задачу проваленной и шлёт алерт.
Дальше — как создать монитор и встроить ping в каждый из планировщиков (crontab, systemd timer, CI).
Как создать 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 и crontab
Принцип общий для любого 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
CI и 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 будет уходить даже при падении задачи, и алерта не будет.
Мониторинг systemd timer
На современных серверах cron часто заменён на systemd timer. Чтобы мониторить systemd timer, добавьте ping в ExecStartPost сервисного юнита — этот шаг выполняется только при ExecStart с кодом возврата 0. Если задача упала, ping не уйдёт, и придёт алерт о пропуске.
# /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.
Что произойдёт, если 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-подписью.
- Окна обслуживания — как заглушить алерты на плановое ТО.