Почему крон является ENV, отличающимся от ENV пользователя?

На новой установке Ubuntu, пользователь PATH :

/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Но в среде крона того же самого пользователя, это:

/usr/bin:/bin

Я посмотрел на точечные файлы всего пользователя в корневом каталоге, ничто там не изменяется PATH.

Что изменяется PATH? Почему крон не использует это PATH?

3
задан 12 June 2015 в 15:53
2 ответа

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

3
ответ дан 3 December 2019 в 05:41

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 .

2
ответ дан 3 December 2019 в 05:41

Теги

Похожие вопросы