我在服务器的cronjob中运行着一个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运行的cronjob中执行脚本,并将以下调试输出到日志文件:
$ whoami
bitbucket
上面证明用户是位桶,然后:
$ echo $PATH
/usr/bin:/bin
请注意,我没有以sudo身份运行。我正在使用sudo切换用户,但没有使用sudo到echo $PATH
。
同一用户如何拥有2个不同的$ PATH变量?
答案 0 :(得分:0)
您没有说您正在使用哪个shell,所以我假设它是bash
。首先要指出的,也许是最重要的一点是,当您运行sudo su bitbucket
时,会得到一个交互式shell。这意味着〜/ .bashrc 将作为源。很多人在该脚本中修改PATH
。容易引起问题的事物。为什么?因为非交互式shell(例如cron为运行您的命令而启动的shell)不会读取〜/ .. bashrc 。
您的cron作业获得的路径等同于运行以下命令:sudo su bitbucket -c 'echo $PATH'
。尝试一下,以更好地了解其工作原理。例如,尝试使用echo $PATH
而不是env
。