I'm having some trouble with an upstart script of ours that changes user and starts up a few ruby daemon processes.
In the past i would simply bash -c "do the business" -l someuser
making sure to use the -l
flag to emulate a login.
This has worked great until now, our ruby process has been throwing the following error: require: no such file to load -- rubygems (LoadError)
after some investigation I found this error only occurs when I run the script as the root user, i.e. (when I sudo su
or when being run by upstart).
I think this is a PATH issue as when I manually set the path first it resolves the issue.
Is there a way to change user and load the entire environment?
I have also tried su user -c
and sudo
.
To make it easier to test I'm "rooting up" (sudo su
) and running which bundle
(bundle is a ruby thing).
Here's what I get:
sudo -i -u webuser which bundle
# => no outputsu -l webuser -c which bundle
# => no outputsudo su - webuser -c which bundle
# => no output
But ssh'd in as webuser
which bundle
# => /opt/ruby/bin/bundle
su - user -c
?/etc/profile
~/.bash_profile
~/.bash_login
and~/.profile
. For login shells, bash evaluates these in the given order.