Skip to content

Как мониторить cron jobs

Коротко:

Cron jobs silent-fail — самая частая причина data loss. Дефолт cron: при ошибке email (если настроен SMTP), иначе ничего. Правильный подход — heartbeat monitoring (dead-man's switch): cron пингует URL после успеха, monitoring сервис ждёт ping и алертит если не получил в ожидаемое время. Решения: Enterno Heartbeat, Healthchecks.io, Cronitor.

Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.

Пошаговая настройка

  1. Создайте heartbeat monitor в Enterno Heartbeat → получите uniq ping URL
  2. Добавьте curl в конец cron команды: 5 2 * * * /usr/bin/backup.sh && curl -fsS PING_URL
  3. Для логирования failure: curl -fsS PING_URL/fail в error path
  4. Установите expected interval (каждый час = 60 мин grace period)
  5. Настройте alerts: Email/Telegram/Slack при missed ping
  6. Verify: закомментируйте cron → через ожидаемое время получите alert
  7. Для batch jobs: pinging /start в начале + /PING_URL в конце → measures duration

Рабочие примеры

СценарийКонфиг
Simple success ping0 3 * * * /usr/local/bin/backup.sh && curl -fsS https://heartbeat.enterno.io/ping/abc123 > /dev/null
Ping с измерением duration0 3 * * * curl -fsS -m 10 https://heartbeat.enterno.io/start/abc123 && /usr/local/bin/backup.sh && curl -fsS https://heartbeat.enterno.io/ping/abc123
Fail ping on error0 3 * * * /backup.sh || curl -fsS https://heartbeat.enterno.io/fail/abc123
With exit code0 3 * * * (/backup.sh; STATUS=$?; curl -fsS https://heartbeat.enterno.io/ping/abc123/$STATUS)
Systemd timer alternative# /etc/systemd/system/backup.service [Service] ExecStart=/backup.sh ExecStartPost=curl -fsS https://heartbeat.enterno.io/ping/abc123

Типичные ошибки

  • curl не имеет -fsS flags — silent fails на 500, ничего не pingается
  • Grace period слишком низкий — получите false positive при short cron delay
  • && between commands: если backup fails, ping не отправится — это правильно для alert
  • Ping URL в git repo — другие могут пинговать и hide настоящие failures
  • Для multi-step pipeline: нужен heartbeat на каждый step, не только финальный
Dead man's switchТревога при молчании задачи
Гибкий grace-периодДопустимое опоздание пинга
REST API пингОдин GET-запрос подтверждает жизнь
Cron + CI + скриптыДля любых периодических задач

Почему нам доверяют

1мин
минимальный интервал
Email
Telegram + Email алерты
HTTP
ping-эндпоинт
Free
5 мониторов бесплатно

Как это работает

1

Создайте heartbeat

2

Пингуйте URL из cron

3

Получите алерт при пропуске

Что такое Heartbeat-мониторинг?

Heartbeat-монитор — это «обратный монитор»: не мы опрашиваем сервис, а сервис сам сигнализирует нам, что он жив. Если за установленный интервал сигнал не приходит — мы отправляем тревогу.

Простая интеграция

Один GET-запрос к уникальному URL — и монитор знает, что задача выполнена.

Grace-период

Задайте допустимое опоздание пинга, чтобы исключить ложные тревоги.

Умные уведомления

Email и Telegram при пропуске пинга. Повторная тревога, если молчание продолжается.

История выполнения

Полный журнал пингов с временными метками — видите каждое выполнение задачи.

Кому это нужно

DevOps

мониторинг cron-задач

Разработчики

контроль фоновых воркеров

Системные администраторы

dead man's switch

Бизнес

мониторинг платёжных очередей

Частые ошибки

Не ставить grace-периодБез grace-периода любая незначительная задержка вызовет ложную тревогу.
Пинговать до начала работыПингуйте в конце задачи — это подтверждает успешное завершение, а не просто запуск.
Один URL для разных задачСоздайте отдельный монитор для каждой cron-задачи — иначе не поймёте, какая именно упала.
Не проверять при ошибкеЕсли задача завершилась с ошибкой — не пингуйте. Отсутствие пинга = сигнал сбоя.

Лучшие практики

Пингуйте в самом концеПоставьте вызов heartbeat URL последней командой в скрипте.
Используйте curl в croncurl -s https://enterno.io/api/heartbeat/TOKEN — просто и надёжно.
Настройте grace = 20–30%Если задача занимает 5 мин, grace-период = 1–2 мин сверху.
Покрывайте все критичные задачиБекапы, генерация отчётов, синхронизация данных — всё должно иметь heartbeat-монитор.

Начните мониторинг cron бесплатно

Heartbeat-монитор: бесплатно 5 задач, алерты в Telegram и на email при пропуске.

Зарегистрироваться (FREE)

Больше по теме

Часто задаваемые вопросы

Cron send email по default — недостаточно?

Часто SMTP не настроен на VPS → email не доходит. Heartbeat активно alertит если cron не запустился вообще (host down, cron daemon stopped).

Healthchecks.io vs Enterno?

Healthchecks — open-source + SaaS free tier. Enterno — интегрирован с uptime/SSL/DNS monitoring в одном dashboard, + RU servers.

Для Kubernetes CronJob — как?

Same principle: <code>curl PING_URL</code> в postStart/postStop container lifecycle hook. Или sidecar container.

Private network cron — как pinging?

Outbound HTTP обычно разрешён. Если нет — self-hosted Healthchecks на internal network.