Перейти к содержанию

Healthchecks: замечать пропущенные задания cron

Мониторинг · Cron
Не изучено

Добавлено 2026-10-11. Нужны Bash, curl и отдельная проверка в Healthchecks.

Проблема

Задание резервного копирования перестало запускаться. Ошибок в логах нет: процесс вообще не стартовал. Обычный мониторинг CPU этого не замечает.

Решение

Healthchecks ожидает сигнал по расписанию и сообщает об опоздании. Сигналы /start, обычный ping и /fail различают запуск, успех и ошибку. У проверки задать расписание, часовой пояс и Grace Time, превышающий нормальную длительность задания.

Монитор должен находиться вне отказного домена VPS: при падении общего хоста локальный Healthchecks также перестанет работать. Можно использовать отдельный сервер или размещённый сервис.

Пример

Обёртка monitored-job.sh получает команду с аргументами. Переменную HC_PING_URL взять из созданной проверки, хранить как секрет задания; не включать трассировку set -x. URL здесь без завершающего / и параметров запроса.

#!/usr/bin/env bash
set -uo pipefail
: "${HC_PING_URL:?Задайте ping URL проверки}"
if (( $# == 0 )); then
  printf 'Нужна команда задания\n' >&2
  exit 64
fi

signal_check() {
  if ! curl --fail --silent --output /dev/null \
      --connect-timeout 3 --max-time 10 --retry 2 \
      "${HC_PING_URL}${1}"; then
    printf 'Не удалось отправить сигнал мониторинга\n' >&2
  fi
}

signal_check /start
if "$@"; then
  job_status=0
  signal_check ''
else
  job_status=$?
  signal_check /fail
fi
exit "$job_status"

Вызов из существующего задания, после настройки переменной окружения:

/usr/local/bin/monitored-job.sh /usr/local/bin/backup-devops-kb.sh

Скрипт бэкапа должен сам возвращать ненулевой код при ошибке. Сбой отправки ping не отменяет бэкап и не подменяет его код завершения. О зависании или невозможности отправить сигнал монитор узнает по таймауту. Для параллельных запусков нужны отдельные проверки или идентификаторы запусков (rid); пример рассчитан на одно задание без перекрытий.

Когда применять

Бэкапы, очистка временных данных, синхронизация, периодические отчёты. Проверка завершения бэкапа дополняет учение восстановления.

Источник

Как применить у себя

  1. Настроить получателя уведомлений и время ожидания.
  2. На тестовой проверке выполнить обёртку с true, затем с false.
  3. Пропустить один тестовый запуск и дождаться уведомления; проверить восстановление состояния следующим успешным ping.
  4. Отметить «Изучено», когда получены уведомления и об ошибке, и о пропуске.