Акция Панель управления ispmanager для VDS — первый месяц бесплатно
до 31.07.2026 Подробнее
Выберите продукт

Linux cron: cronjob, PATH и окружение — почему задания работают в терминале, но падают по расписанию

Cron часто ломает скрипты из-за минимального окружения: другой PATH, SHELL, HOME, locale и рабочий каталог. Покажу, как задать переменные в crontab, где искать логи (файл или journald), как быстро отладить cronjob и когда удобнее systemd timers.
Linux cron: cronjob, PATH и окружение — почему задания работают в терминале, но падают по расписанию

Cron в Linux — простой и надёжный планировщик, но у него есть типичная «подлянка»: окружение задания не равно окружению вашей интерактивной оболочки. Поэтому cronjob отлично отрабатывает при ручном запуске в терминале, но по расписанию падает с загадочными ошибками: «command not found», не находится Python/Node, не подхватываются переменные, не видны ключи/конфиги, не та кодировка, не тот текущий каталог.

Ниже — практичный разбор, как cron запускает команды, что такое crontab-переменные (включая PATH), где искать логи (в том числе /var/log/cron), и когда имеет смысл выбрать systemd timers вместо cron.

Как cron запускает команды: главное отличие от терминала

Когда вы запускаете команду в SSH-сессии, её окружение формируется оболочкой и профилями: ~/.profile, ~/.bashrc, системными файлами /etc/profile и т.п. Там же обычно «дописывается» PATH, выставляются LANG/LC_*, подключаются менеджеры версий (pyenv/nvm/rbenv), алиасы и функции.

Cron же стартует задания в минимальном окружении. Он не является интерактивной оболочкой и обычно не читает ваши .bashrc/.profile. Отсюда два практичных правила:

  • в cronjob используйте абсолютные пути к бинарникам и файлам;
  • если нужны переменные — задавайте их явно в crontab или подгружайте из отдельного env-файла.

Какие переменные обычно есть в окружении cron

Набор зависит от дистрибутива и cron-реализации, но чаще всего присутствуют:

  • SHELL (нередко /bin/sh);
  • HOME (домашний каталог пользователя);
  • LOGNAME/USER;
  • PATH (обычно урезанный, иногда буквально /usr/bin:/bin).

Ключевое: этот PATH почти никогда не совпадает с вашим интерактивным.

PATH в cron: почему «command not found» — самая частая проблема

В интерактивной сессии PATH часто дополнен /usr/local/bin, путями менеджеров версий и пользовательскими каталогами. Cronjob же может запускаться с PATH, в котором нет даже /usr/sbin и /sbin (особенно если задача выполняется не от root).

Типовой симптом: в терминале работают python, node, composer, php, mysqldump, а в cron — «не найдено». Лучше сочетать два подхода:

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

Как задать PATH и SHELL в crontab

В пользовательском crontab (редактируется командой crontab -e) можно задать переменные в «шапке»:

PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
SHELL=/bin/bash
MAILTO=

После этого все строки с расписанием будут выполняться с указанным PATH. Обратите внимание: SHELL по умолчанию может быть /bin/sh, а ваш скрипт может не быть совместимым с sh (например, использует " target="_blank">алерты на истечение SSL-сертификатов и продление.

Поделиться статьей

Вам будет интересно

Debian/Ubuntu: mount: wrong fs type, bad option, bad superblock — как быстро найти и исправить причину OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: mount: wrong fs type, bad option, bad superblock — как быстро найти и исправить причину

Ошибка mount: wrong fs type, bad option, bad superblock в Debian/Ubuntu может означать и простую опечатку в имени раздела, и пробл ...
Debian/Ubuntu: XFS metadata corruption и emergency read-only — пошаговое восстановление OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: XFS metadata corruption и emergency read-only — пошаговое восстановление

Если XFS-раздел внезапно стал доступен только для чтения, а сервер ушёл в emergency mode, главное — не спешить. Разберём безопасны ...
Debian/Ubuntu: как исправить Failed to fetch при apt update OpenAI Статья написана AI (GPT 5)

Debian/Ubuntu: как исправить Failed to fetch при apt update

Ошибка Failed to fetch при apt update в Debian и Ubuntu обычно связана не с самим APT, а с DNS, сетью, зеркалом, прокси, временем ...