如何在不产生两个进程的情况下以不同的用户身份运行nohup?

Apo*_*hem 8 bash process nohup

我正在尝试nohup一个命令并以不同的用户身份运行它,但每次我这样做时都会产生两个进程.

例如:

$ nohup su -s /bin/bash nobody -c "my_command" > outfile.txt &
Run Code Online (Sandbox Code Playgroud)

这肯定会将my_command作为nobody运行,但是有一个我不想显示的额外进程:

$ ps -Af
.
.
.
root ... su -s /bin/bash nobody my_command
nobody ... my_command
Run Code Online (Sandbox Code Playgroud)

如果我杀死root进程,那么nobody进程仍然存在...但是有没有办法不运行root进程?因为获取my_command的id并将其删除有点复杂.

jav*_*dev 11

这可以通过以下方式实现:

su nobody -c "nohup my_command >/dev/null 2>&1 &"
Run Code Online (Sandbox Code Playgroud)

并在pidFile中写入'my_command'的pid:

pidFile=/var/run/myAppName.pid
touch $pidFile
chown nobody:nobody $pidFile
su nobody -c "nohup my_command >/dev/null 2>&1 & echo \$! > '$pidFile'"
Run Code Online (Sandbox Code Playgroud)


twa*_*erg 1

您可能最好在例如中创建一个小脚本,/usr/local/bin/start_my_command如下所示:

#!/bin/bash
nohup my_command > outfile.txt &
Run Code Online (Sandbox Code Playgroud)

使用chown和chmod将其设置为可执行并由 拥有nobody,然后运行即可su nobody -c /usr/local/bin/start_my_command。