Режим отказа, о котором никто не говорит: запланированная задача перестаёт работать, и ничто вас не уведомляет. Windows Task Scheduler показывает зелёный статус “Ready”, в то время как базовый скрипт молчаливо завершается на пропущенной зависимости уже три недели. Задача cron на домашнем сервере пережила обновление ОС в расписании, но не в окружении, и резервная копия, которая должна была запускаться каждую ночь, перестаёт писать файлы. Система не думает, что что-то не так, потому что ничего не было выброшено. Резервная копия просто отсутствует.
Мы тестировали 7 лучших приложений для обнаружения молчаливых отказов запланированных задач в Linux, Windows и macOS в 2026 году. Список охватывает сервисы dead-man-switch, которые ожидают пинга от вашей задачи и срабатывают при его отсутствии, мониторы времени работы, которые также обрабатывают heartbeat’ы в режиме push, экспортеры метрик, которые позволяют визуализировать закономерность, и локальные инструменты, которые превращают сырой сигнал в оповещение туда, где вы его действительно видите.
На что смотреть при выборе монитора запланированных задач
Выберите инструмент, который:
- Использует dead-man switch, а не просто “проверь, что код выхода был нулевым”. Весь смысл в том, что задача вообще не запускается.
- Разумно обрабатывает допуск расписания. Задача, которая запускается в 03:00, должна допускать несколько минут дрейфа перед срабатыванием; задача, которая запускается каждую минуту, не должна допускать часы.
- Отправляет оповещения в канал, который вы проверяете. Email хорош, пока не произойдёт сбой на вашем почтовом сервере; используйте хотя бы один не-email канал (сервис push, webhook Discord, SMS).
- Запускается независимо от хоста, который он отслеживает. Монитор, который умирает вместе с коробкой, которую он смотрит, это не монитор.
- Не требует оплаты за задачу. В домашних хозяйствах часто бывает двадцать или тридцать запланированных задач; модель выставления счётов за задачу превращает домашнюю инфраструктуру в центр затрат компании.
Быстрое сравнение
| Приложение | Лучше всего для | Подход | Самостоятельное размещение | Бесплатный уровень |
|---|---|---|---|---|
| Healthchecks.io | Dead-man switch с опцией самостоятельного размещения | Push heartbeat | Да | Да, 20 проверок |
| Cronitor | Полная телеметрия cron с статистикой за задачу | Push + обёртка | Нет | Да, 5 мониторов |
| Dead Man’s Snitch | Оригинальный heartbeat для запланированных задач | Push heartbeat | Нет | Да, 1 snitch |
| Uptime Kuma | Самостоятельный монитор времени работы с режимом push | Pull + push | Да | Бесплатно, самостоятельное |
| Prometheus Node Exporter | Метрики для статуса systemd timer | Pull метрики | Да | Бесплатно |
| systemd | Встроенное обнаружение отказов на Linux | Встроенное | Да | Бесплатно |
| Gotify | Самостоятельный сервер push-уведомлений | Push сервер | Да | Бесплатно |
Почему “задача запустилась” это не то же самое, что “задача сработала”
Ментальная модель, которую использует большинство планировщиков, это “процесс завершился?”, а нужная модель это “произошёл результат?”. Скрипт резервного копирования, который завершился успешно, потому что исходный каталог был пуст, это не рабочая резервная копия. Синхронизация, которая завершилась успешно, потому что сеть была отключена и цикл повторов тихо отказал, это не рабочая синхронизация. Задача rebuild-search-index, которая завершилась успешно, потому что демон был выключен и клиент вернул пустой ответ, это не рабочее перестроение.
Исправление двухуровневое: задача отправляет heartbeat только после того, как она выполнила свою реальную работу (не просто после запуска), и монитор срабатывает, когда heartbeat исчезает. Ничто другое в стеке расписания не ловит режим “молчаливо ничего не делает”. Task Scheduler не ловит. Cron не ловит. Windows Event Log не ловит.
Приложения
1. Healthchecks.io — лучший dead-man switch с опцией самостоятельного размещения
Healthchecks.io это эталонная реализация паттерна dead-man-switch. Каждая запланированная задача получает уникальный URL, задача выполняет curl этого URL в конце успешного запуска, и Healthchecks срабатывает, если пинг не поступает в ожидаемом окне. Grace-периоды для каждой проверки, ping-with-exit-code (так что curl $URL/fail явно отмечает проверку как неудачную), и расписания для каждой проверки, выраженные либо как простой интервал, либо как полное cron выражение. Slack, Discord, PagerDuty, Gotify, ntfy, email, SMS, webhook и примерно двадцать других каналов оповещения.
Где это не срабатывает: Бесплатный уровень, размещённый на хосте, ограничивается 20 проверками; домашние хозяйства с большой поверхностью автоматизации перерастут его. Самостоятельное размещение это исправляет, но добавляет сервис для обслуживания.
Платформы: Любой Linux/Docker хост для самостоятельного размещения. Размещённый уровень работает со всего, что может сделать HTTP-запрос.
Скачать: Healthchecks.io install
Итоговая оценка: Правильный выбор по умолчанию для heartbeat’ов запланированных задач на домашнем сервере.
2. Cronitor — лучшая полная телеметрия cron с статистикой за задачу
Cronitor идёт дальше heartbeat’а и захватывает полную картину работы — как долго задача работала, код выхода, stdout и stderr, сравнительные графики между запусками и срабатывание на любое из этих изменений. Оберните задачу в CLI Cronitor или пингуйте URL напрямую при старте, завершении и отказе. Панель управления ориентирована на команды; домашнее хозяйство, использующее половину функций, всё равно получит ценность только из графиков времени работы.
Где это не срабатывает: Только размещённый — нет пути самостоятельного размещения. Бесплатный уровень это 5 мониторов, которые быстро заполняют занятый сервер.
Платформы: Любой хост, который может выполнить исходящий HTTPS. CLI-обёртка для Linux, macOS, Windows.
Скачать: Cronitor download
Итоговая оценка: Правильный выбор, когда вы хотите графиков времени работы за задачу и комфортны с размещённым сервисом.
3. Dead Man’s Snitch — лучший оригинальный сервис heartbeat
Dead Man’s Snitch популяризировал паттерн и остаётся одним из самых простых способов перехватить молчаливый отказ. Создайте snitch, получите URL, заставьте задачу хитить этот URL, получите email, если URL не пингован в пределах интервала. Это весь продукт. Когда “нужно ли здесь ещё усложнение?” это правильный вопрос, Dead Man’s Snitch это честный ответ.
Где это не срабатывает: Бесплатный уровень это один snitch — этого хватает, чтобы защитить одну критическую задачу и ничего больше. Глубина функций отстаёт от Healthchecks и Cronitor.
Платформы: Любой хост, который может выполнить исходящий HTTPS.
Скачать: Dead Man’s Snitch signup
Итоговая оценка: Правильный выбор, когда оповещение “резервная копия не запустилась” это единственный результат, который вам нужно защитить.
4. Uptime Kuma — лучший самостоятельный монитор времени работы с режимом push
Uptime Kuma это самостоятельный монитор времени работы, который вырос с надлежащим режимом push наряду со своими HTTP и TCP пробами. Интерфейс point-and-click, большинство каналов оповещения, которые людям нужны, страницы состояния для каждой проверки и та же модель “проверка пушнута в пределах X секунд”, что и Healthchecks. Если домашний сервер уже запускает Uptime Kuma для медиа-стека, добавление heartbeat’ов cron-задач на ту же панель стоит несколько кликов.
Где это не срабатывает: Поддержка режима push новее, чем пробы режима pull, и это именно там, где грубые рёбра. Менее специализирована в use-case heartbeat cron-задач, чем Healthchecks.
Платформы: Linux (Docker), Windows, macOS.
Скачать: Uptime Kuma install
Итоговая оценка: Правильный выбор, когда домашнее хозяйство уже запускает Uptime Kuma и не хочет другую панель.
5. Prometheus Node Exporter — лучшие метрики для состояния systemd timer
Prometheus Node Exporter поставляется с collector’ом для состояния systemd unit и timer. В сочетании с Prometheus и Alertmanager вы можете визуализировать “когда этот timer в последний раз успешно завершился”, срабатывать на “нет успешного запуска за последние N минут” и коррелировать с системными метриками (CPU, диск, сеть). Это промышленный подход; избыточно для домашнего хозяйства, именно правильная форма для кого-то, уже запускающего Prometheus.
Где это не срабатывает: Требует весь стек Prometheus, чтобы быть полезным — это настоящая инфраструктура, не пятиминутная установка. Systemd-специфичен для collector’а timer; cron-задачи требуют другого подхода.
Платформы: Linux, Windows, macOS, FreeBSD.
Скачать: Prometheus Node Exporter releases
Итоговая оценка: Правильный выбор, когда Prometheus уже хранилище метрик на домашней лаборатории.
6. systemd — лучшее встроенное обнаружение отказов на Linux
systemd на современном Linux имеет больше встроенной обработки отказов, чем большинство мигрантов с cron понимают. Unit с OnFailure= запускает другой unit при отказе, которым может быть скрипт mail, webhook или скрипт, который пингует Healthchecks. systemctl list-timers показывает расписание и последний запуск, и systemctl status <unit> показывает код выхода и хвост логов. Для кого-то, уже на systemd timer, половина мониторинга уже в коробке.
Где это не срабатывает: Говорит вам только когда процесс отказал, не когда результат отказал. Скрипт резервного копирования, который завершился, но ничего полезного не сделал, выглядит зелёным для systemd.
Платформы: Linux (дистрибьюции на базе systemd).
Скачать: systemd resources
Итоговая оценка: Правильный минимум на любом Linux сервере, запускающем systemd timer.
7. Gotify — лучший самостоятельный сервер push-уведомлений
Gotify это маленький Go сервер, который превращает любой HTTP-запрос в Android push-уведомление. Сам по себе не обнаруживает отказы; в сочетании с любым из инструментов выше, он становится способом, которым оповещения действительно достигают телефона без зависимости от Firebase Cloud Messaging или сервиса уведомлений третьей стороны. Идеален для домашних хозяйств, где канал оповещения должен быть таким же приватным, как серверы, которые отслеживаются.
Где это не срабатывает: Не монитор сам по себе. Требует установки Android-приложения на принимающих телефонах; поддержка iOS полагается на ntfy или аналогичное, а не на собственное приложение Gotify.
Платформы: Linux (Docker), Windows, macOS, FreeBSD.
Скачать: Gotify install
Итоговая оценка: Правильный последний сервер push-уведомлений для стека самостоятельного размещения.
Как выбрать правильный
- Если вы хотите dead-man switch, который работает сегодня: Healthchecks.io (самостоятельное размещение, когда перерастёт 20 проверок).
- Если вы хотите телеметрию времени работы за задачу и хорошо с размещённым сервисом: Cronitor.
- Если вам нужно защитить только одну критическую задачу: Dead Man’s Snitch.
- Если домашний сервер уже запускает Uptime Kuma: Uptime Kuma.
- Если Prometheus уже хранилище метрик: Prometheus Node Exporter.
- Если Linux сервер запускает systemd timer и вы хотите встроенный мониторинг: systemd.
- Если вы хотите, чтобы оповещения достигли телефонов домашнего хозяйства без прохождения через сервис push третьей стороны: Gotify.
Для большинства домашних лабораторий, работающая комбинация это Healthchecks (самостоятельное размещение) как dead-man switch, подключённое к Gotify для phone push и email как fallback. Всё, что запускается как systemd timer, получает unit OnFailure=, который пингует ту же конечную точку Healthchecks при отказе, так что два сигнала коррелируют.
Часто задаваемые вопросы
В чём разница между heartbeat’ом и health check’ом?
Heartbeat это задача, говорящая “я запустилась и завершилась успешно”. Health check это монитор, исследующий сервис, чтобы видеть, отвечает ли он. Heartbeat’ы ловят молчаливые отказы запланированных задач; health check’и ловят отказы при работе сервиса. Вам нужны оба.
Куда мне отправлять оповещения?
Куда-то вне машины, которая отслеживается. Email хорош как fallback, но не должен быть единственным каналом — если машина, которая запускает mail, это машина, которая отказала, оповещение никогда не уйдёт. Наслаивайте email плюс phone push (ntfy, Gotify, Pushover) плюс chat канал (Discord webhook, Slack) для высокоприоритетных задач.
Как добавить heartbeat к задаче Windows Task Scheduler?
Оберните действие в маленький скрипт PowerShell, который запускает реальную задачу, проверяет код выхода и вызывает Invoke-WebRequest к URL Healthchecks или Cronitor только, когда всё прошло успешно. Крючок “запусти это по завершении” у Task Scheduler не различает успех и отказ чисто, поэтому делайте это в скрипте.
Действительно ли systemd достаточна для мониторинга Linux?
Для “процесс упал?” — да. Для “произошёл результат?” — нет. Комбинируйте OnFailure= systemd с heartbeat’ом, который задача отправляет только после того, как её реальная работа завершилась, для полной картины.
Должен ли я всё ещё отслеживать сам cron?
Да. Cron может быть запущен и здоров, пока отдельные задачи тихо перестают запускаться (плохая синтаксис crontab, изменение разрешений, отсутствующий пользователь). Uptime Kuma или Healthchecks могут также отслеживать время последнего запуска cron на домашнем сервере; если это становится старым, cron это то, что требует внимания.