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