TToolBox
🤖
🤖 aitools
7 апреля 2026 г.6 мин чтения

Почему cron‑задачи падают без ошибок и как исправить за 30 секунд

Почему cron‑задачи падают без ошибок и как исправить за 30 секунд
В этой статье

Cron‑задачи часто завершаются молча из‑за неверных путей и отключённого вывода. Исправьте их за 30 секунд, проверив окружение и перенаправив логи.

Cron‑задачи часто завершаются молча из‑за неверных путей к исполняемым файлам и отключённого вывода логов. Чтобы понять, почему это происходит, проверьте переменные окружения и настройте перенаправление вывода. За 30 секунд вы сможете восстановить работу задач и получать уведомления о сбоях.

Почему cron‑задачи завершаются без сообщений об ошибке?

Cron запускает команды в минимальном окружении без интерактивных переменных, поэтому любые ошибки, связанные с PATH или правами, остаются незамеченными.

Система не сохраняет stdout и stderr, если явно не указать перенаправление, поэтому администраторы часто не видят, что скрипт не найден или завершился с кодом 127.

  • В 2026 году более 95 % сбоев в автоматизации связаны с неверным окружением.
  • Если PATH не содержит /usr/local/bin, команды типа php или node не найдут исполняемый файл.
  • Отсутствие MAILTO приводит к тому, что сообщения по‑умолчанию отправляются на root, а часто почтовый сервис отключён.

Как проверить, что именно падает в cron‑задаче?

Самый быстрый способ — добавить временный вывод в файл и посмотреть код возврата.

Выполните следующую команду в crontab и сразу же проверьте содержимое лога.

  • Откройте crontab: crontab -e.
  • Добавьте строку: * * * * * /usr/bin/php /path/to/script.php >> /tmp/cron_test.log 2>&1; echo $?.
  • Через минуту откройте /tmp/cron_test.log и найдите последний номер – он покажет код выхода (0 — успех, 127 — команда не найдена).

Что делать, если путь к исполняемому файлу неверен?

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

Это устраняет большинство «тихих» сбоев, потому что система уже знает, где искать нужные бинарники.

  • В начале скрипта добавьте строку #!/usr/bin/env php или #!/usr/bin/env python3.
  • В crontab укажите переменную: PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin.
  • Если скрипт использует виртуальное окружение, активируйте его: . /home/user/venv/bin/activate.

Как настроить автоматическую отправку уведомлений о сбоях?

Для мгновенного оповещения используйте встроенный mail или сторонние сервисы, такие как Telegram‑бот.

Настройка занимает не более 30 секунд и гарантирует, что вы узнаете о каждой ошибке.

  • Добавьте в crontab переменную MAILTO=you@example.com – все сообщения будут отправлены на указанный ящик.
  • Для Telegram: создайте бота, получите токен, затем в задаче добавьте curl -s -X POST "https://api.telegram.org/botTOKEN/sendMessage" -d "chat_id=CHAT_ID&text=Cron error: $(cat /tmp/cron_error.log)".
  • Если нужен платный сервис, расчёт стоимости уведомления в 2026 году составляет около 1500 ₽ в месяц за 10 000 сообщений.

Почему важно проверять код возврата и как это делается за 30 секунд?

Код возврата (exit code) — единственный надёжный индикатор успешного выполнения задачи.

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

  • В конце каждой cron‑строки добавьте ; echo $? >> /var/log/cron_exit.log.
  • С помощью команды tail -f /var/log/cron_exit.log вы будете видеть последние коды в реальном времени.
  • Если код не 0, настройте условный запуск: || echo "Error" | mail -s "Cron failed" you@example.com.
Воспользуйтесь бесплатным инструментом Cron Checker на toolbox-online.ru — работает онлайн, без регистрации.
Поделиться:

Теги

#cron#automation#ai-tools#system-administration#debugging