【问题标题】:How do I run nohup as a different user without spawning two processes?如何在不产生两个进程的情况下以不同用户身份运行 nohup?
【发布时间】:2012-07-28 11:33:08
【问题描述】:

我正在尝试 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 并杀死它有点复杂。

【问题讨论】:

    标签: bash process nohup


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:
      nohup runuser nobody -c "my_command my_command_args....." < /dev/null >> /tmp/mylogfile 2>&1 &
      

      【讨论】:

      • runuser 位是什么?
      • 做一个man runuser。它不是 nohup 的参数,而是它自己的单独命令,很像 su
      【解决方案3】:

      这可以实现为:

      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'"
      

      【讨论】:

        【解决方案4】:

        如果是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 &"
        

        【讨论】:

          【解决方案5】:

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2014-02-28
            • 2010-10-03
            • 2010-10-03
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多