【问题标题】:Getting sudo and nohup to work together让 sudo 和 nohup 一起工作
【发布时间】:2013-07-02 17:50:08
【问题描述】:

这里是 Linux 新手。

我有一个 perl 脚本,它需要两个命令行输入。我试图在后台运行它,但这就是我得到的:

[~user]$ nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ nohup: appending output to `nohup.out'

系统返回“nohup: appending output to `nohup.out'”后,不会出现新的提示。然后只要我输入一些其他命令,shell 就会告诉我进程已停止:

[~user]$ nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
[2] 19603
[~user]$ nohup: appending output to `nohup.out'
ls
ascii_loader_script.pl  format_wrds_trd.txt  nohup.out  norm_wrds_trd.cfg
[2]+  Stopped                 nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv

我查看了这篇文章并尝试在执行命令之前执行“sudo date”。还是得到了同样的东西。 http://www.sudo.ws/pipermail/sudo-users/2003-July/001648.html

【问题讨论】:

  • 我可以建议另一种解决方案吗?您可能希望使用nohup 来保护进程不关闭终端。如果是,你可能会更好screen
  • 建议的解决方法:将sudo echo hi 或其他内容添加到您的.bashrc 文件中,这样您就可以在开始时输入一次密码

标签: linux sudo nohup


【解决方案1】:

解决方案是使用sudo的-b标志在后台运行命令:

$ sudo -b ./ascii_loader_script.pl 20070502 ctm_20070502.csv

只有在关闭当前终端会话后仍希望程序继续运行时,才应使用 nohup

【讨论】:

  • 非常感谢。现在我可以做一些很棒的事情了,比如nohup sudo -b mongod
  • 等一下,但如果您确实希望在关闭当前终端会话后继续该过程怎么办?
  • 我想跟进@KurtWheeler 所说的话,如果您关闭终端会发生什么?命令的输出会发生什么?这就是 nohup 的全部意义,它在后台,输出到一个文件,当你退出终端时它不会停止。关于 sudo -b 选项的文档还有很多不足之处。
【解决方案2】:

恕我直言,这里的问题不是nohup,而是后台处理sudo。

您将进程置于后台(& 在命令末尾)但可能 sudo 需要密码验证,这就是进程停止的原因。

尝试以下方法之一:

1) 删除命令末尾的 & 符,回复密码提示,后记将其置于后台(通过输入 CTRL-Z - 停止进程并发出 bg 命令将其发送到后台)

2) 将 /etc/sudoers 更改为不询问用户密码,方法是包含以下行: 我的用户名 ALL=(ALL) NOPASSWD: ALL

如果除了密码回复之外,您的应用程序还等待其他输入,那么您可以将输入通过管道传递给命令,如下所示: $ cat response.txt|sudo mycommand.php

【讨论】:

  • 执行 bg 后是否可以停止进一步输出
  • 这正是我的问题。谢谢你的回答!
【解决方案3】:

你可以试试

sudo su

然后

nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

而不是

nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

【讨论】:

  • 我认为这比接受的答案和最高投票的答案都要好。这些都没有真正解决如何使用 sudo 运行 nohup。
  • 这个对我来说是最好的!
【解决方案4】:

您必须先使用 sudo,然后再使用 nohup。

sudo nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

【讨论】:

  • 对于其他读者来说,这里显示的命令行不正确,但关于 order 的注释是正确的。 & 符号将在此处使用 sudo,而不是作为 sudo 运行的命令;像其他答案提到的那样,使用 -b 标志来 sudo 代替。
  • 为什么?首先使用'sudo'的原因是什么?
  • 碰到上面的问题 - 请解释为什么这个顺序是正确的。
  • 从那时起,我记得我第一次使用 nohup 时它不起作用。我不记得是什么原因了。
【解决方案5】:

首先,你应该切换sudonohup。 然后:

if sudo echo Starting ...
then
    sudo nohup <yourProcess> &
fi

echo Starting ... 可以被任何不做太多的命令替换。 我只将它用作sudo 的虚拟命令。

由此 if 条件中的 sudo 触发密码检查。 如果没问题,则sudo 会话已登录并且第二次调用将成功,否则if 将失败并且不执行实际命令。

【讨论】:

    【解决方案6】:

    我打开一个编辑器并输入这些行:

    #!/bin/bash
    sudo echo Starting ...
    sudo -b MyProcess
    

    (其中 MyProcess 是我想以超级用户身份运行的任何东西。)

    然后我将文件保存为 MyShellScript.sh 。

    然后更改文件权限以允许执行。 然后在终端中运行它。 "-b" 选项告诉 sudo 在后台单独运行该进程,因此该进程在终端会话终止后继续运行。

    在 linux-mint 为我工作。

    【讨论】:

      【解决方案7】:

      您可以将其设置为您的别名:

      sudo sh -c 'nohup openvpn /etc/openvpn/client.ovpn 2>&1 > /dev/null &'
      

      【讨论】:

        【解决方案8】:

        这应该可以工作

        sudo -b -u userName ./myScript > logFile
        

        我只是想知道,在 ./myScript 在后台成功运行后,我可以将此日志文件作为电子邮件发送。

        【讨论】:

          【解决方案9】:

          我在后台评估磁盘碎片的工作解决方案:

          1. 使用 nohup 执行 sudo,末尾不带与号 (&):
            $ sudo nohup nice -20 find / -type f -exec filefrag "{}" \; | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2\t\1/'| awk -F ' ' '$1 &gt; 0' | sort -n -r | head -50 &gt; filefrag.txt  
          1. 输入 sudo 密码;
          2. Ctrl+Z
          3. 将正在运行的进程置于后台。
          $ bg 1
          [1]+ sudo nohup nice -20 find / -type f -exec filefrag "{}" \; | sed 's/^\(.*\): \([0-9]\+\) extent.*/\2\t\1/' | awk -F ' ' '$1 > 0' | sort -n -r | head -50 > filefrag.txt &
          
          1. 现在您可以退出终端并稍后登录。该进程将继续在后台运行。因为使用了 nohup

          【讨论】:

            【解决方案10】:

            试试:

            xterm -e "sudo -b nohup php -S localhost:80 -t /media/malcolm/Workspace/sites &>/dev/null"
            

            当您关闭 xterm 时,PHP 网络服务器仍然存在。
            不要将nohup 放在sudo 之前,否则PHP web 服务器将在关闭xterm 后被杀死。

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2016-10-02
              • 2013-04-05
              相关资源
              最近更新 更多