При новой установке Ubuntu пользователь PATH
является:
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games
Но в среде cron того же пользователя это:
/usr/bin:/bin
Я просмотрел все точечные файлы пользователя в домашнем каталоге, там ничего не меняет PATH
.
Что меняет PATH
? Почему cron не использует это PATH
?
Что касается вопроса - почему это так - страница руководства, которая объясняет это, crontab(5)
, IOW доступный через man 5 crontab
(не по умолчанию в разделе 1). Демон cron не пытается имитировать сеанс оболочки, скорее он устанавливает чистую минимальную среду для запуска заданий cron, а затем, в свою очередь, позволяет файлу crontab устанавливать свои собственные произвольные переменные среды. Более новый демон cron, поставляемый с Debian, также имеет несколько дополнительных положений для pam_env
и т.п.
Cron не выполняет процессы в оболочке входа в систему. Из-за этого все типичные сценарии не загружаются при выполнении процесса.
Выполнение процесса из оболочки входа в систему должно воспроизводить среду пользователя.
Поместите что-то подобное в crontab и сравните два вывода:
*/1 * * * * /usr/bin/env > /tmp/env
*/1 * * * * /usr/bin/bash -l -c /usr/bin/env > /tmp/bashenv
Как вы видете, /tmp/bashenv
будет иметь множество переменных среды, которые /tmp/env
не. Это потому что env
был вызван в оболочке входа с использованием bash -l
.