我在服务器上的一个cron作业中运行了一个php脚本。
但是,根据执行命令的方式,我意外地从同一个用户获得了不同的$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我从运行为bitbucket的cron作业中执行一个脚本,并将以下调试输出到日志文件中:
$ whoami
bitbucket以上证明用户是bitbucket,那么:
$ echo $PATH
/usr/bin:/bin请注意,我不是像sudo那样跑步的。我使用sudo来切换用户,但不使用sudo到echo $PATH。
同一个用户怎么会有两个不同的$PATH变量?
发布于 2019-05-30 23:48:14
您没有说明您使用的是哪个shell,所以我假设它是bash。首先,也是最重要的一点是,当您运行sudo su bitbucket时,您将得到一个交互式的shell。这意味着~/..bashrc将被来源于。很多人在这个脚本中修改PATH。容易引起问题的东西。为什么?因为非交互式shell,比如cron启动的运行命令的shell,不会读取~/..bashrc。
您的cron作业获得的路径相当于运行以下命令:sudo su bitbucket -c 'echo $PATH'。玩这个游戏,以更好地理解这是如何工作的。例如,不要使用echo $PATH,而是尝试env。
https://stackoverflow.com/questions/56371504
复制相似问题