如何在init脚本中以特定用户身份运行命令?

我正在编写一个init脚本,它应该以不同于root的用户身份执行单个命令。 这是我目前的做法:
sudo -u username command

这通常在Ubuntu / Debian上按预期工作,但是在RHEL上,作为command执行的脚本挂起。
有另一种方式来作为另一个用户运行命令?
(请注意,我不能使用lsb init函数,因为它们在RHEL / Centos 5.x上不可用)

在RHEL系统上,/ /etc/rc.d/init.d/functions脚本旨在提供类似于所需的内容。 如果您在初始化脚本的顶部输入它,则所有的函数都可用。

提供帮助的特定功能是daemon 。 如果你打算使用它来启动一个守护进程程序,一个简单的用法是:

 daemon --user=username command 

如果这对于你所需要的来说过于霸道,那么就有runuser (参见man runuser的完整信息;有些版本可能需要-u在用户名之前):

 /sbin/runuser username -s /bin/bash -c "command(s) to run as user username" 

而不是sudo ,试试

 su - username command 

根据我的经验, sudo并不总是在RHEL系统上可用,但su是,因为su是coreutils软件包的一部分,而sudo是sudo软件包中的一部分。

如果你有启动 – 停止守护进程

 start-stop-daemon --start --quiet -u username -g usergroup --exec command ... 

对于系统风格的初始化脚本,这非常简单。 您只需在[服务]部分添加一个用户=。

这里是我在CentOS 7上用于qbittorrent-nox的初始化脚本:

 [Unit] Description=qbittorrent torrent server [Service] User=<username> ExecStart=/usr/bin/qbittorrent-nox Restart=on-abort [Install] WantedBy=multi-user.target 

我通常是这样做的(即sudo -u用户名命令)。 但是,也有'djb'的方式来运行守护进程与另一个用户的权限。 请参阅: http : //thedjbway.b0llix.net/daemontools/uidgid.html