我有一个 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
我从作为 bitbucket 运行的 cronjob 执行脚本并将以下调试输出到日志文件:
$ whoami
bitbucket
以上证明用户是bitbucket,那么:
$ echo $PATH
/usr/bin:/bin
请注意我没有以 sudo 身份运行。我正在使用 sudo 来切换用户,但没有使用 sudo 来 echo $PATH
。
为什么同一个用户有 2 个不同的 $PATH 变量?
最佳答案
您没有说明您使用的是哪个 shell,所以我假设它是 bash
。首先,也许是最重要的一点是,当您运行 sudo su bitbucket
时,您将获得一个交互式 shell。这意味着 ~/.bashrc 将被获取。许多人在该脚本中修改 PATH
。容易引起问题的东西。为什么?因为非交互式 shell,例如由 cron 启动以运行命令的 shell,不会读取 ~/.bashrc。
您的 cron 作业获得相当于运行此命令的 PATH:sudo su bitbucket -c 'echo $PATH'
。尝试一下,以更好地理解它是如何工作的。例如,代替 echo $PATH
尝试 env
。
关于php - linux $PATH 对于同一个用户是不同的,取决于它的访问方式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56371504/