Оповещения о сбоях cron-задач: звонок, когда задача по расписанию падает

Cron-задачи падают молча. Разберём три надёжные схемы, которые позволяют обнаружить упавшие или пропущенные задачи по расписанию и получить push-уведомление или звонок за считаные секунды.

Содержание

Опасность упавшей cron-задачи в том, что не происходит ничего. Ни страницы ошибки, ни падения, ни разгневанных пользователей — только бэкап, который три недели назад тихо перестал выполняться, отчёт, который так и не отправился, или скрипт очистки, позволивший диску заполниться до тех пор, пока не лёг продакшен.

В самом cron нет никаких встроенных оповещений. Если задача завершается с ошибкой, cron просто пожимает плечами. Если в назначенное время сервер недоступен, задача попросту не запускается — и не остаётся ничего, что сообщило бы вам об этом. Именно второй случай упускает большинство систем мониторинга.

В этом руководстве — три схемы, которые ловят оба типа сбоев, и способ сделать оповещение невозможным для пропуска: эскалировать его до настоящего телефонного звонка с помощью Echobell.

Схема 1: оповещение о сбое по коду возврата

Самый простой подход: вызывать вебхук каждый раз, когда задача завершается с ненулевым статусом.

Сначала создайте канал в Echobell и скопируйте его URL вебхука. Затем оберните свою cron-команду:

0 3 * * * /opt/scripts/backup.sh || curl -s "https://hook.echobell.one/t/<channel-token>?title=Backup+failed&host=$(hostname)"

Если backup.sh отрабатывает успешно, не происходит ничего. Если падает — Echobell доставит оповещение на ваш телефон за считаные секунды. Параметры запроса становятся переменными шаблона, поэтому уведомление может точно указать, какая задача и на каком хосте завершилась с ошибкой.

Для длинных скриптов больше контекста даст trap:

#!/usr/bin/env bash
set -euo pipefail

notify_failure() {
  curl -s -X POST "https://hook.echobell.one/t/<channel-token>" \
    -H "Content-Type: application/json" \
    -d "{\"job\":\"nightly-backup\",\"host\":\"$(hostname)\",\"line\":\"$1\"}"
}
trap 'notify_failure $LINENO' ERR

# ... логика вашей задачи ...

Ограничение: это работает только тогда, когда скрипт действительно запускается и падает. Если сервер недоступен, cron настроен неверно или кто-то закомментировал строку во время отладки, оповещение не сработает никогда. Поэтому вам нужна ещё и схема 2.

Схема 2: Dead man's switch для пропущенных запусков

Dead man's switch переворачивает логику: задача пингует монитор при успехе, а монитор оповещает вас, когда пинг не приходит по расписанию. Так отлавливаются все виды сбоев — ошибки, зависания, мёртвые серверы и удалённые строки crontab.

Два популярных решения с возможностью self-hosting хорошо работают вместе с Echobell:

  • Healthchecks.io сделан ровно для этого. Создайте проверку с вашим cron-расписанием и допустимой задержкой, а затем добавьте && curl -s https://hc-ping.com/YOUR_UUID в конец строки crontab. Если пинг опаздывает, Healthchecks отправляет вебхук — направьте его на ваш канал в Echobell, и пропущенный бэкап превратится в звонящий телефон.
  • Uptime Kuma содержит тип монитора «Push», работающий по тому же принципу: ваша задача обращается к push-URL, а Uptime Kuma оповещает через свои интеграции уведомлений, как только heartbeat перестаёт приходить.

В обоих случаях порядок такой: cron-задача → пинг об успехе → монитор замечает тишину → вебхук в Echobell → push-уведомление или звонок.

Схема 3: проверки по временному окну для задач, которые отдают данные

Некоторые задачи надёжнее проверять по результату, а не по коду возврата. Если ночной ETL должен вставить строки к 4 утра, небольшая проверочная задача может посмотреть количество строк и вызвать вебхук Echobell, когда цифры выглядят неправильно.

Здесь помогают условия Echobell: отправляйте статусный вебхук после каждого запуска и позвольте каналу решать, когда уведомлять. Условие вроде status != "ok" оставит успешные запуски беззвучными, а встроенные переменные времени в UTC ограничат оповещения тем окном, в котором задача должна была завершиться.

Как сделать оповещение невозможным для пропуска

Обнаружение — только половина задачи. Оповещение о сбое бэкапа, которое в 3 часа ночи приходит беззвучным баннером, функционально ничем не отличается от отсутствия оповещения.

В Echobell каждый канал выбирает свой уровень срочности:

  • Обычное — стандартное push-уведомление, подходит для информационных задач
  • Срочное — пробивается через «Фокусирование» в iOS, подходит для задач, на которые кто-то должен взглянуть в ближайшее время
  • Звонок — телефон звонит как при настоящем вызове, пока вы не заметите

Для задач, где тихий сбой стоит реальных денег — бэкапы баз данных, биллинговые прогоны, обновление сертификатов, — переключите канал на Звонок. Разница между «увидел в 3 ночи» и «увидел в 9 утра» — это ровно та разница, которую даёт оповещение звонком.

Если за задачу отвечают несколько человек, поделитесь с командой ссылкой на подписку на канал; все подписчики получат одно и то же оповещение в один и тот же момент.

Какую схему выбрать?

  • Хук по коду возврата: настройка за пять минут, ловит явные сбои. Начните с него.
  • Dead man's switch: ловит ещё и пропущенные, и зависшие запуски. Добавьте его для каждой задачи, пропажу которой вы бы действительно заметили.
  • Проверки данных по временному окну: для конвейеров, где «отработало успешно, но выдало мусор» — реальный риск.

Они хорошо сочетаются: хук по коду возврата сообщает, что задача упала и почему, а dead man's switch гарантирует, что вы узнаете и о тех сбоях, которые не успели заявить о себе.

Настройте первое оповещение для cron за несколько минут: скачайте Echobell, создайте канал и добавьте один curl в crontab. Когда в следующий раз задача по расписанию упадёт в 3 часа ночи, ваш телефон зазвонит — и бэкап, который вы будете восстанавливать в следующем квартале, действительно будет существовать.

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

Оповещения звонком, когда ваш API недоступен

Обычные push-уведомления о сбоях API теряются в общем потоке. Разберём, как настроить оповещения звонком, которые действительно разбудят вас, когда откажут критичные сервисы.

Читать далее

Оповещения для ночной торговли: 6 декабря рынок перестаёт закрываться

6 декабря 2026 года американские акции переходят на 23-часовой торговый день, а криптодеривативы CME торгуются круглосуточно с мая. Разбираем, как направить ночное ценовое оповещение в телефонный звонок через Echobell — и чего более громкое оповещение всё равно не исправит.

Читать далее

Ваш ИИ-агент ждёт вас: превращаем запросы на подтверждение в телефонные звонки

Автономные агенты молча останавливаются и ждут, когда им нужен человек. Ничто в стеке агентов не заставит ваш телефон зазвонить. Разбираем, как связать запросы на подтверждение и сорвавшиеся запуски с настоящим звонком через Echobell.

Читать далее