Почему cron ENV отличается от ENV пользователя?

При новой установке 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?

2 ответа

Решение

Что касается вопроса - почему это так - страница руководства, которая объясняет это 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,

Другие вопросы по тегам