切换用户在一个初始化脚本?

这是我的Ubuntu工作站上的Init脚本。 我需要运行一个命令作为另一个用户比根,但我不能让我的头了,应该怎么做。 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”和“p”的服务“foo”表示生产

这是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 .... 

对于新贵,请使用:

 setuid myuser exec command args 

su可能是一个更通用的方法,但是在sudo的一些常见分配中也可以这样做:

 sudo -u $MUSER $COMMAND $ARGS 

(只是重读你的问题,并没有意识到这不适合你,但它已经在我的初始化脚本)