Heartbeat-мониторинг cron-задач
Heartbeat отвечает на один вопрос: «эта задача вообще запускалась?». Ваш скрипт дёргает короткий URL при каждом успешном прогоне. Пинг не пришёл вовремя — Base388 открывает инцидент и пишет вам. Настройка занимает одну строку в существующем cron.
Что это такое
Heartbeat — это «сигнал жизни», который ваша задача подаёт сама. Вы создаёте heartbeat, получаете персональный Ping URL и указываете ожидаемую периодичность. Каждый успешный прогон задачи дёргает этот адрес. Если очередной пинг не пришёл в срок, Base388 фиксирует пропуск, открывает инцидент и уведомляет вас — а когда пинг снова пойдёт, инцидент закроется сам.
- Ping URL принимает и GET, и POST — подойдёт curl, wget, планировщик Windows, GitHub Actions, systemd timer, код приложения.
- Не требует входящего доступа к вашему серверу: соединение всегда исходящее. Работает за NAT, в закрытом контуре и на машине без белого IP.
- История пингов и событий хранится согласно retention тарифа: видно, когда задача шла ровно, а когда начала опаздывать.
Что умеет и зачем это нужно
Каждая возможность — с пояснением, какую задачу бизнеса она закрывает.
Персональный Ping URL
На каждый heartbeat выдаётся уникальный токен и адрес вида /hb/{token}. Секрет знает только ваша задача, ничего настраивать на стороне сети не нужно.
Подключение занимает минуту и не требует участия админа: любой разработчик добавит строку в существующий cron.
Ожидаемая периодичность и допуск
Вы говорите, как часто задача должна отчитываться. Base388 считает пинг просроченным, если он не пришёл в срок, и заводит инцидент.
Задача, тихо переставшая запускаться, — самый незаметный вид аварии. Heartbeat превращает «ничего не произошло» в явный сигнал.
Инцидент и авто-восстановление
Пропуск открывает инцидент того же вида, что и падение сайта, — с таймлайном и комментариями. Первый же новый пинг закрывает его автоматически.
Аварии cron и аварии сайта живут в одном списке и в одном отчёте. Не нужно держать в голове два разных пульта.
Свои каналы уведомлений
Каждому heartbeat назначаются свои каналы: ночной бэкап — в личку админу, выгрузка остатков — в чат отдела. Тихие часы и правила повторов работают так же, как для сайтов.
Ответственный узнаёт о своей задаче, а не весь чат обо всех. Меньше шума — выше шанс, что на алерт отреагируют.
Самомониторинг ваших кронов
К любой консольной команде можно добавить опцию --heartbeat-tok=<токен>: пинг уйдёт автоматически и только при успешном завершении. Упавшая команда пинг не отправит и уйдёт в просрочку.
Обвязку не нужно писать вручную и поддерживать в каждом скрипте — достаточно одного флага в строке cron.
Учёт в отчётах
События heartbeat попадают в общий журнал инцидентов и в периодические отчёты о доступности, которые приходят на выбранный канал раз в день, неделю или месяц.
Регулярность фоновых процессов становится измеримой, а не предметом веры.
Как это настраивается
Создайте heartbeat
Назовите задачу и укажите, как часто она должна отчитываться.
Скопируйте Ping URL
Персональный адрес показывается сразу после создания.
Добавьте пинг в задачу
Одна строка в конце cron-задачи или один запрос в конце скрипта — после успешного завершения.
Забудьте о ней
Пока задача идёт, вы ничего не получаете. Пропала — приходит уведомление.
# Пинг уходит только если бэкап завершился успешно (&&)
0 3 * * * /usr/local/bin/backup.sh && curl -fsS https://app.base388.ru/hb/ВАШ_ТОКЕН
# Из PHP/Python/Node — тот же адрес, обычный GET или POST
curl -fsS -X POST https://app.base388.ru/hb/ВАШ_ТОКЕН
# Для консольных команд Base388 — встроенный флаг, без обвязки
* * * * * php bin/console app:reports:send --heartbeat-tok=ВАШ_ТОКЕН
Зачем это нужно на самом деле
Бэкап, которого нет
Классическая катастрофа: бэкап «делается» полгода, а в день восстановления выясняется, что задача отвалилась в первую же неделю. Heartbeat ловит это в первый пропущенный прогон.
Тишина — не значит «всё хорошо»
Скрипт, который перестал запускаться, не пишет ошибок и не шлёт писем. Он просто молчит. Heartbeat инвертирует логику: тревога срабатывает именно на молчание.
Данные, которые устарели незаметно
Остановившаяся выгрузка цен или остатков не ломает сайт — она делает его врущим. Заказы принимаются на то, чего нет на складе, а по старым ценам.
Ноль доверия к чужой инфраструктуре
Heartbeat не требует пускать нас внутрь: соединение исходящее. Это часто единственный способ мониторить задачи в контуре, куда внешний доступ закрыт принципиально.
Heartbeat или Jobs — в чём разница
Оба типа мониторят фоновые процессы, но отвечают на разные вопросы. Heartbeat спрашивает «запуск был?». Jobs спрашивает «как именно он прошёл?». Простое правило: если вам достаточно знать, что задача жива, берите heartbeat. Если нужно знать длительность, результат и текст ошибки — берите jobs.
| Вопрос | Heartbeat | Jobs |
|---|---|---|
| Главный вопрос | Задача запускалась вовремя? | Как прошёл конкретный запуск? |
| Сколько сигналов шлёт задача | Один — по факту успеха | Три — старт, завершение, ошибка |
| Что фиксируется | Факт и время пинга | Длительность, статус и текст ошибки каждого прогона |
| Когда открывается инцидент | Пинг не пришёл в срок | Ошибка, превышение времени или обрыв прогона |
| Ловит «висящую» задачу | Только после пропуска следующего срока | Да, по таймауту прямо во время выполнения |
| Сложность подключения | Одна строка | Три вызова вокруг тела задачи |
| Кому обычно подходит | Бэкапы, простые cron, чужие скрипты | Длительные ETL, импорты, отчёты, деплой-пайплайны |
Их можно использовать вместе: для одной и той же команды указать и --heartbeat-tok, и --jobs-tok. Тогда вы получите и контроль регулярности, и подробный журнал каждого прогона.
Кто это использует
Разбор сценариев, в которых этот тип мониторинга закрывает основную боль.
Индивидуальный разработчик
Несколько своих и клиентских проектов, ночные cron и pet-проекты — без бюджета на «энтерпрайз».
Смотреть кейс E-commerceИнтернет-магазин
Витрина, корзина, оплата и выгрузка остатков: контроль всей цепочки, на которой держится заказ.
Смотреть кейс DevOpsDevOps и системные администраторы
Внешняя точка правды рядом с внутренним стеком: cron, пайплайны, сертификаты и дежурство без шума.
Смотреть кейсЧастые вопросы
Что если задача выполнилась, но с ошибкой?
Нужен ли моему серверу белый IP?
Можно ли пинговать из планировщика Windows или из CI?
Что будет, если задача разово опоздала на минуту?
Сколько heartbeat-задач можно завести?
Проверьте, жив ли ваш ночной бэкап
Создайте heartbeat, добавьте строку в cron — и узнайте правду уже завтра утром.