Добавить в корзинуПозвонить
Найти в Дзене

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

Cron‑задачи часто завершаются молча из‑за неверных путей к исполняемым файлам и отключённого вывода логов. Чтобы понять, почему это происходит, проверьте переменные окружения и настройте перенаправление вывода. За 30 секунд вы сможете восстановить работу задач и получать уведомления о сбоях. Cron запускает команды в минимальном окружении без интерактивных переменных, поэтому любые ошибки, связанные с PATH или правами, остаются незамеченными. Система не сохраняет stdout и stderr, если явно не указать перенаправление, поэтому администраторы часто не видят, что скрипт не найден или завершился с кодом 127. Самый быстрый способ — добавить временный вывод в файл и посмотреть код возврата. Выполните следующую команду в crontab и сразу же проверьте содержимое лога. Укажите абсолютный путь к интерпретатору и скрипту, а также задайте переменную PATH вручную. Это устраняет большинство «тихих» сбоев, потому что система уже знает, где искать нужные бинарники. Для мгновенного оповещения используйте
Оглавление

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 — работает онлайн, без регистрации.