nohup和按下回车会停止进程:为什么?

5

我的脚本需要root权限,我想在远程机器上运行它,然后能够关闭本地计算机。

所以我执行了以下命令: $ nohup sudo ./myScript arg1 &

......这是我经常使用的方式,但在另一台我一直是root用户的不同机器上,所以没有使用sudo。由于某种原因,现在它无法工作:

nohup sudo ./myScript.sh 1 &  //then I press enter twice
[8] 24264
me@my-laptop:~/myFolder$ nohup: ignoring input and appending output to `nohup.out'


[8]+  Stopped                 nohup sudo ./myScript.sh 1

这里我做错了什么?

sudo想要请求输入密码,但nohup会将进程与控制终端断开连接。 - Barmar
那我应该怎么做呢?sudo nohup ./script & - Ricky Robinson
3
尝试使用 sudo sh -c 'nohup ./script &' 命令。当系统要求输入密码时,不要将 sudo 放入后台运行。 - Anton Kovalenko
1
您可能还想查看sudoers - 为特别配置的用户绕过密码。 - Andrew Alcock
谢谢。虽然我不明白为什么我的问题被关闭了。嗯... - Ricky Robinson
3个回答

3
如其他回答所提到的,如果使用nohup启动的后台进程尝试从终端读取或写入数据,则会被放入“已停止”状态。您正在执行的sudo进程尝试从终端读取您的密码,因此该进程已停止(由于某种原因,当按下Enter键时似乎触发了读取操作)。
因此,为了避免这种情况,您需要确保在执行nohup之前输入密码并成为root用户。例如,像这样:
sudo bash -c 'nohup ./myScript.sh arg1 &'

我的脚本不需要sudo,但使用bash -c对我有用,否则nohup总是在按下回车后停止。 - Karl

2

试试这个:

sudo nohup ./script

回答密码提示后,输入Ctrl-z来暂停它,然后用bg将其放到后台。

如果您正在运行一个长时间的进程,当您决定需要在后台运行时,这尤其有帮助。


1
你是说将 bg 放到后台运行吗? - Stu

1
这里有一个选项,可以使用 screen 工具。启动 screen,运行你的脚本,使用 CTRL+A, D 分离。稍后再登录,通过再次运行 screen 重新连接到进程。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接