我在使用我们的新贵脚本时遇到了一些麻烦,该脚本更改用户并启动一些 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_profile
or /etc/profile
,请参阅这。
答案2
对于登录上下文,请使用:
sudo -i -u USER COMMAND
su -l USER -c COMMAND