在 shell 脚本中更改用户并加载整个环境

在 shell 脚本中更改用户并加载整个环境

我在使用我们的新贵脚本时遇到了一些麻烦,该脚本更改用户并启动一些 ruby​​ 守护进程。

在过去,我只是bash -c "do the business" -l someuser确保使用该-l标志来模拟登录。

到目前为止,这一直很有效,我们的 ruby​​ 进程一直抛出以下错误:require: no such file to load -- rubygems (LoadError)经过一番调查,我发现此错误仅在我以 root 用户身份运行脚本时才会发生,即(当我sudo su或由 upstart 运行时)。

我认为这是一个 PATH 问题,因为当我首先手动设置路径时,它解决了问题。

有没有办法更改用户并加载全部的环境?

我也尝试过su user -c并且sudo.


为了更容易测试,我“root up”(sudo su)并运行which bundle(bundle 是一个 ruby​​ 东西)。

这是我得到的:

  • sudo -i -u webuser which bundle# => 无输出
  • su -l webuser -c which bundle# => 无输出
  • sudo su - webuser -c which bundle# => 无输出

但以网络用户身份通过​​ ssh 登录

  • which bundle# => /opt/ruby/bin/bundle

答案1

使用sudo su - user -c将使您以继承其路径的人身份登录。这就是为什么su user不同于su - user.

但是,如果您在文件中设置路径,.bashrc它将仅对交互式会话生效(即以该用户身份进行 ssh 登录)。

您应该改用.bash_profileor /etc/profile,请参阅

答案2

对于登录上下文,请使用:

  • sudo -i -u USER COMMAND
  • su -l USER -c COMMAND

相关内容