Linux $ PATH отличается для одного и того же пользователя, в зависимости от того, как к нему обращаются - PullRequest
0 голосов
/ 30 мая 2019

У меня есть скрипт php, запущенный в cronjob на сервере.

Однако я неожиданно получаю разные $ PATH от одного и того же пользователя в зависимости от того, как я выполняю команду.

Я захожу как пользователь ubuntu:

ubuntu@:$ echo $PATH 
/home/ubuntu/bin:/home/ubuntu/.local/bin:/home/ubuntu/.nvm/versions/node/v12.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

Я тогда sudo su bitbucket:

bitbucket@:$ echo $PATH
/home/bitbucket/.nvm/versions/node/v12.3.1/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games

Я выполняю скрипт из cronjob, работающего как bitbucket, и выводю следующую отладку в файл журнала:

$ whoami
bitbucket

Вышеприведенное доказывает, что пользователь является bitbucket, тогда:

$ echo $PATH
/usr/bin:/bin

Обратите внимание, я не работаю как sudo. Я использую sudo для переключения пользователей, но не использую sudo для echo $PATH.

Почему один и тот же пользователь имеет 2 разные переменные $ PATH?

1 Ответ

0 голосов
/ 31 мая 2019

Вы не сказали, какую оболочку вы используете, поэтому я предполагаю, что это bash.Первое и, пожалуй, самое важное, на что следует обратить внимание, это то, что при запуске sudo su bitbucket вы получаете интерактивную оболочку.Это означает, что ~ / .bashrc будет получено.Многие люди изменяют PATH в этом сценарии.То, что имеет тенденцию вызывать проблемы.Зачем?Поскольку неинтерактивные оболочки, такие как запущенная cron для запуска вашей команды, не будут читать ~ / .bashrc .

Ваше задание cron получает PATH, эквивалентный выполнению этой команды: sudo su bitbucket -c 'echo $PATH'.Поиграйте с этим, чтобы лучше понять, как это работает.Например, вместо echo $PATH попробуйте env.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...