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)
您可能最好在例如中创建一个小脚本,/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。