Ubuntu 在初始化脚本中切换用户?

Ubuntu 在初始化脚本中切换用户?,ubuntu,sudo,init,Ubuntu,Sudo,Init,这是我在Ubuntu工作站上的初始化脚本。我需要以root以外的另一个用户身份运行命令,但我就是不知道该怎么做。无论是sudo-u还是sunewuser似乎都不起作用 剧本: respawn console none start on runlevel [2345] stop on runlevel [06] script su "anotherUser" -c ./myCommand end script 我用这个: su -l $MUSER -c "myCommand args..

这是我在Ubuntu工作站上的初始化脚本。我需要以root以外的另一个用户身份运行命令,但我就是不知道该怎么做。无论是
sudo-u
还是
sunewuser
似乎都不起作用

剧本:

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服务客户的“foo”和“p”表示生产

下面是init脚本的一部分。init脚本可以作为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
....

su可能是一种更通用的方法,但在一些常见的sudo发行版上也可以:

sudo -u $MUSER $COMMAND $ARGS
(只需重新阅读您的问题,并没有意识到这对您不起作用,但它在初始化脚本中对我起了作用)

对于upstart,请使用:

setuid myuser
exec command args

使用这种类型的命令“su-c'your command'different_user”,正如@Henrick在下面的回答中指出的,upstart脚本可以使用来设置用户,-l开关做什么,-l |--登录一种使shell启动登录shell的方法。我不知道脚本的实际开始在哪里?作者说:
su-l$MUSER-c“myCommand args…”
,然后他展示了脚本
foo\u bar\u p-celeryd
,该脚本检查它是由root用户还是用户启动的。但是如何确定(定义)谁启动脚本
foo\u bar\u p-celeryd
?@beemaster脚本
/etc/init.d/foo\u bar\u p-celeryd
由system-v init调用。这是旧的unix东西。今天我使用systemd,我对systemd非常满意。这是否回答了你的评论?很好!它加载.bashrc、profile和类似的东西吗?在
/etc/rc.local
中尝试过,但在Ubuntu 16.04上不起作用。还尝试了以下方法:
su-l user-c/home/user/script
。有什么建议吗?