Мониторинг задач Cron с помощью Heartbeats: практический учебник
Задачи Cron, которые выполняются успешно, — это просто. Задачи Cron, которые падают громко, — это тоже просто: ошибка приходит на почту. Сложные задачи — это задачи Cron, которые вообще перестают выполняться. Сервер перезагружается, контейнер вытесняется, учётная запись пользователя отключается, таймер systemd маскируется изменением конфигурации. Задача никогда не запускается, ошибка не генерируется, и вы узнаёте об этом три недели спустя, когда обнаруживаете, что резервные копии, которые должны были создаваться, исчезли. Мониторинг heartbeat ловит именно такой режим отказа.
Как работает мониторинг heartbeat
Монитор импульса инвертирует обычное отношение проб. Вместо того, чтобы внешний зонд проверял вашу службу, ваша задача вызывает монитор. Вы определяете окно благодати (например: «эта задача должна отправлять импульс каждый час, дайте ей пять минут запаса»). Когда монитор перестает получать импульсы, он открывает событие простоя и отправляет вам оповещение.
Результат — это аварийный переключатель. Пока задача выполняется и сообщает об успехе, монитор молчит. В момент, когда она не отправляет импульс (потому что упала, потому что сервер отключен, потому что кто-то отключил таймер), срабатывает оповещение. Три недели молчаливого отказа резервной копии становятся пятиминутным инцидентом.
Когда использовать импульсы вместо обычных проверок
Импульсы не являются заменой HTTP-мониторингу. Они охватывают другой класс задач: все, что запускается по расписанию.
- Задачи резервного копирования: ночные дампы, синхронизация S3, удаленный rsync.
- Запуски конвейеров данных: задачи ETL, ежедневное создание отчетов, согласование платежей.
- Маркетинговые письма по расписанию: еженедельная рассылка, капельные кампании.
- Задачи обновления SSL: certbot, acme.sh.
- Все, что выполняется в cron, systemd timers, GitHub Actions schedules, Cloudflare Workers cron или AWS EventBridge.
Как добавить импульс в задачу bash cron
Самый простой паттерн — один вызов curl в конце вашего скрипта. URL импульса уникален для каждого монитора; не проверяйте его в контроль версий.
Паттерн, который элегантно обрабатывает отказы: `do_the_work && curl -fsS --retry 3 https://your-monitor.example/heartbeat`. && срабатывает только если основная работа прошла успешно. --retry 3 обрабатывает временные сетевые сбои. -fsS заставляет curl быть тихим при успехе и громким при отказе, что именно нужно cron.
Импульсы из Python и Node
Один и тот же паттерн на двух популярных языках. Оба оборачивают работу в try/except, сообщают об успехе только при успешном завершении.
- Python: `try: do_the_work(); requests.post('https://your-monitor.example/heartbeat', timeout=10); except Exception: logger.exception('job failed')`
- Node: `try { await doTheWork(); await fetch('https://your-monitor.example/heartbeat', { method: 'POST' }); } catch (err) { console.error('job failed', err); }`
- Важно: не отправляйте импульс в блоке finally. Finally срабатывает и при успехе, и при отказе. Вы хотите, чтобы импульс был положительным сигналом успеха, а не просто сигналом запуска.
Установка окна благодати
Окно благодати — это самая частая ошибка при настройке. Слишком короткое, и вы получите ложные тревоги, когда задача выполняется на несколько секунд позже. Слишком долгое, и реальный отказ останется незамеченным в течение часов.
Хорошее практическое правило: 2x нормальная продолжительность задачи плюс 5 минут. Ночная резервная копия, которая обычно занимает 8 минут, хочет окно благодати 8 * 2 + 5 = 21 минута. Еженедельная задача, которая занимает 2 часа, хочет окно благодати 2 * 2 + 0.5 = 4.5 часа. Окно благодати защищает вас от безвредной вариации, а не от реальных отказов.
Типичные паттерны импульсов для первой настройки
Если вы начинаете с нуля, три импульс-монитора ловят большинство молчаливых сбоев, которые доставляют людям проблемы. Ночной монитор резервного копирования с окном благодати в 6 часов. Монитор обновления SSL на cron, который запускает certbot или acme.sh, с окном благодати в одну неделю. Ежедневный монитор отчётов или выверки выставления счетов с окном благодати в 90 минут. Вместе эти три монитора перехватывают режимы отказа, которые остаются незаметными дольше всего и имеют самые серьезные последствия. После их установки постепенно добавляйте импульс-мониторинг к каждому другому запланированному заданию.
Попробуйте MonitorAH бесплатно
Три монитора, оповещения менее чем за минуту, без банковской карты. Подключите один сайт и одну задачу cron быстрее, чем прочитаете этот абзац.
Начать мониторингПохожие статьи
Мониторинг SSL-сертификатов: практическое руководство на 2026 год
Как отслеживать срок действия SSL-сертификатов, на что настраивать оповещения и какие операционные привычки предотвращают предупреждения браузера.
Как мониторить REST API на время работы и время отклика
Что проверять в мониторе REST API, правильные пороги и как поймать молчаливые сбои, которые пропускают проверки пинга.
Как отслеживать распространение DNS после смены регистратора
Как отслеживать DNS записи во время миграции, что проверить и как обнаружить незаметные сбои при частичном распространении.