让sudo和nohup一起工作

Ale*_*hen 37 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'
Run Code Online (Sandbox Code Playgroud)

系统返回"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
Run Code Online (Sandbox Code Playgroud)

我看过这篇文章并试图在执行命令之前做"sudo date".仍然有同样的事情. http://www.sudo.ws/pipermail/sudo-users/2003-July/001648.html

dus*_*der 48

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

$ sudo -b ./ascii_loader_script.pl 20070502 ctm_20070502.csv
Run Code Online (Sandbox Code Playgroud)

如果您希望程序在关闭当前终端会话后继续,则应该只使用nohup

  • 非常感谢你.现在我可以做一些奇妙的事情,比如`nohup sudo -b mongod`. (13认同)
  • 等等,但是如果您确实希望在关闭当前终端会话后继续该过程该怎么办? (3认同)

小智 20

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

您将进程置于后台(&命令结束),但可能sudo需要密码身份验证,这就是进程停止的原因.

尝试以下方法之一:

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

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

如果除了密码回复你的应用程序等待其他输入,那么你可以输入管道输入如下:$ cat responses.txt | sudo mycommand.php

心连心


Qki*_*kiZ 5

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

sudo nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
Run Code Online (Sandbox Code Playgroud)

  • 对于其他读者来说,此处显示的命令行不正确,但有关顺序的注释是正确的。& 符号将在此处设置 sudo 背景,而不是作为 sudo 运行的命令;使用 -b 标志来 sudo 代替,就像其他答案提到的那样。 (6认同)

小智 5

你可以试试

sudo su
Run Code Online (Sandbox Code Playgroud)

进而

nohup ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
Run Code Online (Sandbox Code Playgroud)

代替

nohup sudo ./ascii_loader_script.pl 20070502 ctm_20070502.csv &
Run Code Online (Sandbox Code Playgroud)

  • 我认为这比接受的答案和得票最高的答案都要好。这些都没有真正解决如何让 nohup 与 sudo 一起运行。 (2认同)