← Все статьи
Типы мониторов · 8 мин чтения

Мониторинг задач Cron с помощью Heartbeats: практический учебник

A wall of analog clocks at slightly different times in a modern office.

Задачи 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 быстрее, чем прочитаете этот абзац.

Начать мониторинг

Похожие статьи