Here\'s my Init script which I have at my Ubuntu workstation. I need to run a command as another user than root, but I just can\'t get my head around how it should be done. Neit
For upstart, use:
setuid myuser
exec command args
su is probably a more universal approach, but this is also possible on some common distributions with sudo:
sudo -u $MUSER $COMMAND $ARGS
(just reread your question and didn't realize that doesn't work for you, but it has worked for me in init scripts)
I use this:
su -l $MUSER -c "myCommand args..."
Update: Since there is interest in this answer, I explain the way I use it here.
We run servers as normal linux users, not root. The username contains three parts:
service, customer, stage
This way we can run several services for several customers in one linux OS.
Example: foo_bar_p Service "foo" of customer "bar" and "p" means production
Here is the part of the init script. The init script can be executed as root or as foo_bar_p user:
# /etc/init.d/foo_bar_p-celeryd
# scriptname contains linux username
SCRIPT_NAME=`basename "$0"`
SYSTEM=${SCRIPT_NAME%*-celeryd}
U=`id -nu`
if [ ! $U == $SYSTEM ]; then
if [ $U == "root" ]; then
# use "-l (login)" to delete the environment variables of the calling shell.
exec su -l $SYSTEM -c "$0 $@"
fi
echo "Script must be run from $SYSTEM or root. You are '$U'"
rc_exit 1
fi
# OK, now I am foo_bar_p
cd
. $HOME/.bashrc
....