我在使用我们的新贵脚本时遇到了麻烦,该脚本更改了用户并启动了一些ruby守护进程。
在过去,我只会bash -c "do the business" -l someuser
确保使用该-l
标志来模拟登录。
到目前为止,这一直很好,我们的ruby进程一直抛出以下错误:require: no such file to load -- rubygems (LoadError)
经过调查后,我发现此错误仅在以root用户身份运行脚本时(即,当我sudo su
或当被新贵运行时)发生。
我认为这是一个PATH问题,因为当我首先手动设置路径时,它可以解决问题。
有没有办法改变用户并加载整个环境?
我也曾尝试su user -c
和sudo
。
为了使测试更容易,我正在“扎根”(sudo su
)并运行which bundle
(捆绑是一件红宝石的东西)。
这是我得到的:
sudo -i -u webuser which bundle
#=>没有输出su -l webuser -c which bundle
#=>没有输出sudo su - webuser -c which bundle
#=>没有输出
但是以Webuser的身份登录
which bundle
#=> / opt / ruby / bin / bundle
这是什么分布?
—
artistoex 2012年
您的脚本是否取决于每个用户安装的ruby模块?
—
基思
@artistoex这是ubuntu :)
—
Daniel Upton
我将确保它确实是PATH问题(将变量转储到脚本中)。然后比较PATH并查看
—
artistoex 2012年
/etc/profile
~/.bash_profile
~/.bash_login
和~/.profile
。对于登录shell,bash按照给定顺序对其进行评估。
su - user -c
吗?