---
title: "Оповещения о сбоях cron-задач: звонок, когда задача по расписанию падает"
description: "Cron-задачи падают молча. Разберём три надёжные схемы, которые позволяют обнаружить упавшие или пропущенные задачи по расписанию и получить push-уведомление или звонок за считаные секунды."
date: 2026-07-16
author: Nooc
authorAvatarLink: /images/avatars/nooc.webp
authorLink: https://nooc.me
tags:
  - cron-задачи
  - оповещения о сбоях
  - оповещения звонком
  - мониторинг
  - вебхук
---

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

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

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

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

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

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

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

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

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

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

```bash
#!/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](https://healthchecks.io)** сделан ровно для этого. Создайте проверку с вашим cron-расписанием и допустимой задержкой, а затем добавьте `&& curl -s https://hc-ping.com/YOUR_UUID` в конец строки crontab. Если пинг опаздывает, Healthchecks отправляет вебхук — направьте его на ваш канал в Echobell, и пропущенный бэкап превратится в звонящий телефон.
- **[Uptime Kuma](/ru/docs/developer/uptime-kuma)** содержит тип монитора «Push», работающий по тому же принципу: ваша задача обращается к push-URL, а Uptime Kuma оповещает через свои интеграции уведомлений, как только heartbeat перестаёт приходить.

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

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

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

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

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

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

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

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

Для задач, где тихий сбой стоит реальных денег — бэкапы баз данных, биллинговые прогоны, обновление сертификатов, — переключите канал на **Звонок**. Разница между «увидел в 3 ночи» и «увидел в 9 утра» — это ровно та разница, которую даёт [оповещение звонком](/ru/features/call-notifications).

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

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

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

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

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