Tracker.ru На главную

Dead man switch для cron и фоновых задач: что это и как настроить

Dead man switch — это сигнализация на молчание: алерт приходит, когда задача не выполнилась. Что это, зачем нужен для бэкапов и cron и как настроить за пару минут.

Dead man switch (буквально «выключатель мёртвой руки», встречается и как dead man's switch, и как «реверсивный мониторинг») — это способ заметить, что задача не выполнилась. Обычный мониторинг бьёт тревогу, когда что-то сломалось и прислало сигнал. Dead man switch устроен наоборот: алерт приходит, когда сигнал перестал поступать.

Ваш ночной бэкап, выгрузка остатков, рассылка отчётов или любая задача по расписанию каждый раз сообщает: «я отработал». Перестала сообщать — вам приходит уведомление. В Tracker.ru эта механика называется heartbeat-мониторинг и настраивается из личного кабинета за пару минут.

Чем dead man switch отличается от обычного мониторинга

Сайт может прекрасно отвечать на запросы, а ночной бэкап при этом второй месяц молча падать. Классический мониторинг доступности этого не увидит — сайт-то работает. Dead man switch видит именно тишину там, где должен быть сигнал.

Обычный мониторинг Dead man switch
Что отслеживает Что сайт отвечает на запросы Что задача регулярно отчитывается
Когда приходит алерт Когда сайт перестал отвечать Когда задача перестала отчитываться
Что ловит Падение сайта, ошибку, таймаут Молчание: задача не запустилась или упала
Что не ловит Тихо упавший фоновый процесс Падение самого сайта

Это два разных инструмента под две разные слепые зоны. Для сайта нужен один, для фоновых задач — другой.

Зачем нужен dead man switch

Он закрывает задачи, которые работают без человека и о провале которых вы узнаёте, только когда уже поздно: бэкапа за нужную дату нет, отчёт не ушёл, остатки на сайте неверны. Типичные кандидаты:

  • Ночные бэкапы баз данных и файлов.
  • Регулярные выгрузки и синхронизации — товары, остатки, заказы, обмен с 1С.
  • Рассылки и отчёты по расписанию — еженедельная сводка, ежедневный дайджест.
  • Очистка временных файлов, логов, истёкших сессий.
  • Продление SSL-сертификатов — автообновление иногда тихо ломается.
  • Любые задачи в планировщике cron, в systemd-таймерах, в GitHub Actions.

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

Как настроить dead man switch в Tracker.ru

Готовый сервис dead man switch не нужно собирать самому — достаточно создать heartbeat-монитор. Порядок такой:

  1. Создайте монитор в разделе heartbeat-мониторов. Укажите, как часто задача должна отчитываться (раз в час, раз в сутки) и сколько подождать опоздание, прежде чем бить тревогу.
  2. Скопируйте персональную ссылку-пинг — она выглядит как https://hb.tracker.ru/ping/<ваш-токен> и привязана только к этому монитору.
  3. Добавьте вызов этой ссылки в самый конец задачи — чтобы пинг уходил только после успешного завершения работы.
  4. Выберите канал алертов — Telegram, MAX, email или webhook.

Ключевой момент: пинг отправляется последней строкой задачи. Если задача упала на середине — до пинга дело просто не дойдёт, сигнал не уйдёт, и вы получите алерт. Именно поэтому такой мониторинг ловит не только «сервер выключили», но и «скрипт сломался по дороге».

Готовые примеры для bash, systemd и GitHub Actions — в пошаговом руководстве по мониторингу cron-задач. Технические детали пинга — периодичность, токен, форматы запроса — собраны в документации по heartbeat-мониторингу.

Пример: молчание ночного бэкапа

Скрипт бэкапа базы запускается в 3:00 и в самом конце дёргает ссылку-пинг. Месяцами всё идёт гладко: пинг приходит каждую ночь, монитор зелёный, вы о нём даже не вспоминаете.

Однажды на сервере кончилось место. Бэкап упал на середине — до строки с пингом дело не дошло. В 3:15 в Telegram прилетел алерт: «бэкап не отчитался». Утром вы освободили диск и перезапустили задачу.

Без dead man switch вы бы узнали об этом в самый неподходящий момент — когда бэкап реально понадобился, а свежей копии нет. Здесь же проблему было видно тем же утром, пока она ничего не стоила.

Когда dead man switch не нужен

Это не универсальное решение, и навешивать его на всё подряд не стоит:

  • Разовые ручные запуски мониторить незачем — вы и так рядом и видите результат.
  • Сам сайт или API dead man switch не закрывает. Для них нужен обычный мониторинг доступности — про разницу подробно в статье чем uptime-мониторинг отличается от observability.
  • Если задача и так присылает вам письмо об ошибке и вы его читаете — это частичная замена. Но письмо приходит, только когда задача запустилась и упала. Молчание — когда задача вообще не стартовала — таким письмом не ловится. А это самый коварный случай.

Dead man switch закрывает ровно одну вещь: слепую зону «задача тихо не выполнилась».

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

Что такое dead man switch простыми словами?

Это сигнализация на молчание. Вы договариваетесь с сервисом, что ваша задача будет регулярно подавать признаки жизни — отправлять короткий сигнал «я отработала». Пока сигналы приходят вовремя, всё спокойно. Как только сигнал не пришёл в срок, сервис понимает: что-то пошло не так, и присылает вам алерт. В отличие от обычного мониторинга, который реагирует на ошибку, dead man switch реагирует именно на тишину.

Чем dead man switch отличается от heartbeat-мониторинга?

Это одно и то же, просто разные названия. «Heartbeat» (сердцебиение) — про регулярный сигнал, который шлёт задача. «Dead man switch» — про реакцию на пропажу этого сигнала. В Tracker.ru функция называется heartbeat-мониторинг, и она работает ровно как dead man switch: ждёт пинг, а при его отсутствии — бьёт тревогу.

Как сделать dead man switch для бэкапов?

Создайте heartbeat-монитор, задайте период (для ночного бэкапа — раз в сутки) и допустимое опоздание. Скопируйте ссылку-пинг и добавьте её вызов в самый конец скрипта бэкапа — после того как копия успешно создана и проверена. Тогда пинг уйдёт только при удачном бэкапе. Если скрипт упадёт раньше или не запустится вовсе, пинг не придёт, и вы получите алерт. Пошаговые примеры команд — в руководстве по мониторингу cron-задач.

Что будет при кратковременном сбое сети?

Один пропущенный или опоздавший пинг из-за моргнувшей сети не обязан сразу поднимать тревогу. При настройке монитора вы задаёте запас по времени сверх периода и можете требовать несколько пропусков подряд, прежде чем придёт алерт. Так разовое опоздание не превращается в ложное срабатывание, а реальное молчание — замечается.

Это платный сервис?

Heartbeat-мониторинг доступен на тарифах Tracker.ru вместе с мониторингом сайтов — отдельный сервис под dead man switch заводить не нужно. Нужный тариф зависит от того, сколько мониторов вам требуется; актуальные планы и цены — на странице тарифов. Начать можно с одного монитора на самую важную задачу — например, на ночной бэкап.

См. также