php - linux $PATH 对于同一个用户是不同的,取决于它的访问方式

标签 php linux cron environment-variables

我有一个 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/

相关文章:

php - 查询 tpl 文件中的数据库以添加 CSCart?

php - 有没有办法在 PHP 中获取引用函数的名称?

linux - 在 Linux 中将日期 append 到文件名

linux - 为什么我预定的工作没有完成?

c# - 什么等同于 ASP.NET 中的 cron 作业?

python - 通过 cron 从 bash 脚本内部运行 python 文件

php - CakePHP 自动渲染不停止默认 View

php - 在 php 中执行我的查询时出错,但在 phpmyadmin 中执行时出错

ruby - OS X 中内置的 Ruby 扩展可以在 Linux 上运行吗?

linux - 脚本有随机 'Operation Not Permitted' 错误