Я использую это:
su -l $MUSER -c "myCommand args..."
Обновление : Поскольку этот ответ интересен, я объясняю, как я его здесь использую.
Мы запускаем серверы как обычные пользователи linux, а не как root. Имя пользователя состоит из трех частей:
сервис, заказчик, этап
Таким образом, мы можем запустить несколько служб для нескольких клиентов в одной ОС Linux.
Пример: foo_bar_p Сервис "foo" клиента "bar" и "p" означают производство
Вот часть сценария инициализации. Сценарий инициализации может быть выполнен как пользователь root или как пользователь foo_bar_p:
# /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
....