让sudo和nohup一起工作

时间:2013-07-04 16:45:48

标签: linux sudo nohup

Linux新手在这里。

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

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

系统返回“nohup:将输出附加到'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

10 个答案:

答案 0 :(得分:46)

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

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

如果您希望程序在关闭当前终端会话后继续

,则应该只使用nohup

答案 1 :(得分:17)

这里的问题,imho,不是nohup,而是后台处理sudo。

您正在将该流程置于后台(& at command of command),但可能sudo需要密码身份验证,这就是流程停止的原因。

尝试以下方法之一:

1)从命令结尾删除&符号,回复passord提示符,然后将其放在后台(通过键入CTRL-Z - 停止进程并发出bg命令将其发送到后台)

2)通过包含以下行来更改/ etc / sudoers以不要求用户密码: myusername ALL =(ALL)NOPASSWD:ALL

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

HTH

答案 2 :(得分:4)

你必须首先使用sudo,nohup second。

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

答案 3 :(得分:1)

这应该有效

sudo -b -u userName ./myScript > logFile

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

答案 4 :(得分:1)

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

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

echo Starting ...可以替换为任何做不多的命令。 我只将它用作sudo的伪命令。

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

答案 5 :(得分:1)

我打开一个编辑器并键入以下行:

{{1}}

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

然后我将文件保存在我想要的位置MyShellScript.sh。

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

在linux-mint工作。

答案 6 :(得分:1)

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

  1. 使用 nohup 执行 sudo,最后不带&符号(&):
  $ 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. 输入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

答案 7 :(得分:0)

尝试:

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

关闭xterm时,PHP网络服务器仍处于活动状态 不要在nohup之前放置sudo,否则关闭xterm后会冻结PHP网络服务器。

答案 8 :(得分:0)

您可以将其设置为别名:

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

答案 9 :(得分:0)

您可以尝试

sudo su

然后

nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &

代替

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