Linux · cron

Мониторинг cron-задач: пропуски, ошибки и зависания

Добавьте сигналы начала и завершения в cron. Tickwatch заметит пропущенный запуск, ошибку или превышение времени и отправит уведомление.

Free: 5 мониторов, Telegram и email.

Пример уведомления

● nightly-import

Задача сообщила об ошибке выполнения.

Открыть монитор

Демонстрационные данные. Вид и состав сообщения зависят от канала и типа события.

Когда это нужно

Сайт может отвечать, пока ночной импорт, расчёт отчётов или очистка очереди уже несколько дней не выполняются. Проверка HTTP не показывает результат фоновой задачи. Tickwatch ждёт сигнал по её расписанию и отдельно учитывает начало, завершение и ошибку.

Как подключить

  1. 1

    Создайте cron-монитор: перенесите расписание и часовой пояс планировщика, добавьте допустимое опоздание.

  2. 2

    Сохраните обёртку ниже и замените в crontab вызов задачи на команду с обёрткой.

  3. 3

    Подключите Telegram или email. Проверьте один успешный запуск, одну ошибку и один пропуск на тестовой задаче.

Готовый пример

Нужны Bash, curl и uuidgen на сервере задачи. Сохраните код как /opt/tickwatch-run.sh, замените URL пинга своим и укажите абсолютный путь к рабочему скрипту. Ключ пинга не публикуйте. Обёртка сохраняет код завершения задачи; ошибка отправки сигнала её не прерывает.

tickwatch-run.sh
#!/usr/bin/env bash
# Save as tickwatch-run.sh; run: bash tickwatch-run.sh /path/to/job.sh
if [ "$#" -eq 0 ]; then echo "Usage: $0 command [args...]" >&2; exit 2; fi
PING='https://ping.tickwatch.dev/YOUR_PING_KEY'
RID=$(uuidgen) || exit 1
ping() {
  curl -fsS --connect-timeout 3 --max-time 5 --retry 2 --retry-max-time 12 \
    -X POST "$PING/$1?rid=$RID" >/dev/null 2>&1 || true
}
finish() {
  code=$?
  trap - EXIT
  if [ "$code" -eq 0 ]; then ping ""; else ping fail; fi
  exit "$code"
}
trap finish EXIT
trap 'exit 130' INT
trap 'exit 143' TERM
ping start
"$@"
Запуск или настройка
0 3 * * * /usr/bin/bash /opt/tickwatch-run.sh /usr/local/bin/job.sh

Что проверить перед запуском

  • Ненулевой код завершения отправляет /fail. Отсутствие сигнала обнаруживается после дедлайна и запаса времени.

  • Для зависаний задайте максимальную длительность: один /start без завершения не должен оставаться незамеченным.

  • Проверьте PATH, права, рабочую папку и окружение именно пользователя cron. Ручной запуск из терминала не воспроизводит всё его окружение.

Частые вопросы

Нужен агент на сервере?

Для этого сценария достаточно исходящих HTTPS-запросов из curl. Входящий порт для Tickwatch открывать не нужно.

Что будет, если весь сервер выключится?

Сигнал перестанет поступать, и монитор заметит пропуск по расписанию. Это говорит об отсутствии отчёта, а не устанавливает причину выключения сервера.

Проверьте первый запуск, пока задача ещё работает

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

Мониторинг cron-задач: пропуски, ошибки и зависания · Tickwatch