9

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

例如:

$ nohup su -s /bin/bash nobody -c "my_command" > outfile.txt &

这肯定会以无人身份运行 my_command,但是还有一个我不想显示的额外过程:

$ ps -Af
.
.
.
root ... su -s /bin/bash nobody my_command
nobody ... my_command

如果我杀死根进程,nobody 进程仍然存在......但是有没有办法根本不运行根进程?由于获取 my_command 的 id 并杀死它有点复杂。

4

5 回答 5

13

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

su nobody -c "nohup my_command >/dev/null 2>&1 &"

并在 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'"
于 2015-06-03T08:02:21.717 回答
3
nohup runuser nobody -c "my_command my_command_args....." < /dev/null >> /tmp/mylogfile 2>&1 &
于 2013-03-21T17:50:16.817 回答
2

如果用户使用 nologin shell,运行如下:

su - nobody -s /bin/sh -c "nohup your_command parameter  >/dev/null 2>&1 &"

或者:

runuser - nobody -s /bin/sh -c "nohup your_command parameter  >/dev/null 2>&1 &"

或者:

sudo su - nobody -s /bin/sh -c "nohup your_command parameter  >/dev/null 2>&1 &"

sudo runuser -u nobody -s /bin/sh -c "nohup your_command parameter  >/dev/null 2>&1 &"
于 2017-05-16T06:54:54.843 回答
1

您最好创建一个小脚本,例如/usr/local/bin/start_my_command

#!/bin/bash
nohup my_command > outfile.txt &

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

于 2012-07-30T19:02:43.993 回答
0

在会话上运行它的注意事项是,如果您在后台运行,则有一个与会话关联的作业,并且后台作业可能会被终止( su -c 解决了这个问题)。

要取消进程与 shell 的关联(以便您可以退出 shell 但保持进程运行),请使用disown.

于 2020-07-02T19:59:40.037 回答