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

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

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

решение1

Что касается вопроса - почему это так - страница руководства, которая это объясняет crontab(5), это IOW, та, через которую можно получить доступ man 5 crontab(а не та, что по умолчанию в разделе 1). Демон cron не пытается эмулировать сеанс оболочки, а вместо этого настраивает чистую, минимальную среду для выполнения заданий cron, а затем, в свою очередь, позволяет файлу crontab устанавливать свои собственные произвольные переменные среды. Более новый демон cron, поставляемый с Debian, также имеет несколько дополнительных положений для pam_envи т. д.

решение2

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.

Связанный контент