Диагностика · пропущенный запуск

Cron не запускается: что проверить и как заметить следующий сбой

Проверьте расписание, пользователя, PATH и права cron. Добавьте внешний контроль пропущенных запусков, даже когда скрипт не стартует.

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

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

● daily-report

К ожидаемому времени сигнал не получен. Запас времени истёк.

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

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

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

Уведомление в конце скрипта не поможет, если cron не запустил сам скрипт. Сначала нужно проверить планировщик и окружение, затем поставить внешний дедлайн: к какому времени результат должен появиться. Тогда отсутствие сообщения тоже станет сигналом.

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

  1. 1

    Проверьте crontab -l от имени нужного пользователя, службу cron/crond и её журнал. Сверьте часовой пояс.

  2. 2

    Запустите команду с теми же правами, переменными и рабочей папкой. Укажите абсолютные пути и перенаправьте stderr в локальный журнал.

  3. 3

    После исправления подключите монитор с реальным расписанием. Пропустите запуск тестовой задачи и дождитесь дедлайна с запасом.

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

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

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 >> /var/log/my-job.log 2>&1

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

  • Команда работает вручную, но не в cron: начните с PATH, переменных окружения и относительных путей.

  • Нет даже попытки запуска: проверьте пользователя crontab, состояние службы и правильность выражения расписания.

  • Задача запускается с задержкой: запас времени должен учитывать обычную длительность и задержки, но не скрывать часы простоя.

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

Tickwatch исправит cron автоматически?

Нет. Он обнаруживает отсутствие результата и уведомляет. Причину нужно устранить в планировщике, окружении или коде задачи.

Почему проверка только ошибок недостаточна?

Чтобы отправить ошибку, скрипт должен начать работу. Контроль дедлайна обнаруживает и тот случай, когда до выполнения кода дело вообще не дошло.

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

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

Cron не запускается: что проверить и как заметить следующий сбой · Tickwatch