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 1fi# OK, now I am foo_bar_pcd. $HOME/.bashrc....