这是我在Ubuntu工作站上拥有的Init脚本。我需要以root用户以外的其他用户身份运行命令,但是我只是无法理解应该如何执行。 sudo -usu newuser似乎都无效。

剧本:

respawn
console none

start on runlevel [2345]
stop on runlevel [06]

script
  su "anotherUser" -c ./myCommand
end script

最佳答案

我用这个:

su -l $MUSER -c "myCommand args..."

更新:由于对此答案感兴趣,因此我在这里解释了使用它的方式。

我们以普通的Linux用户而不是root用户的身份运行服务器。用户名包含三个部分:

服务,客户,舞台

这样,我们可以在一个Linux操作系统中为多个客户运行多种服务。

示例:foo_bar_p客户“bar”的服务“foo”,“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
....

关于ubuntu - 在初始化脚本中切换用户?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8940771/

10-11 06:17
查看更多