使用' nohup'无法成功断开与远程计算机的连接或者'屏幕'

时间:2015-06-05 00:05:32

标签: bash ssh nohup xterm

我正在尝试在远程计算机上进行一些工作,并在不终止工作的情况下断开连接。我已经尝试了nohupscreen,遗憾的是它没有成功。在我输入exit注销后,我的工作也会立即终止。

我正在尝试在远程计算机上运行108次模拟。为此,我编写了一个名为batch.sh的脚本,它运行一个模拟,直到所有108个完成。实际运行模拟的程序在5个不同的终端中启动5个程序(使用xterm -e)。我使用:

运行batch.sh

nohup bash batch.sh &

只要我连接,一切正常。如果我断开然后重新连接以检查一切是否正常工作......没有快乐:(

我有什么警告吗?可能是因为我的程序在外部终端中启动了其他程序?

更新

如果我在启动脚本之前使用将-oForwardX11=no添加到ssh并取消设置DISPLAY的建议,我会收到以下错误:

nohup: ignoring input and appending output to nohup.out

nohup.out我收到以下消息:

xterm Xt error: Can't open display:

xterm: DISPLAY is not set

1 个答案:

答案 0 :(得分:0)

显然,您的脚本/程序正在尝试自行启动xterm。目前,许多系统默认为其SSH客户端启用X11转发 - 因此{shell}会话中设置DISPLAY变量,但断开连接后变为无效。因此,只要您连接到远程系统,xterm进程就可以通过SSH连接访问本地计算机上的X服务器,但一旦连接被切断就会死掉。

我偶尔会遇到使用例如Java程序的相同问题。即使没有实际的图形窗口,Java AWT子系统也可以生成图像文件。如果没有可用的X服务器,您应首先查看您的程序是否会以某种方式进行调整。一种选择是使用-oForwardX11=no选项禁用X11转发至ssh

$ ssh -oForwardX11=no user@server.host.name

您还可以在启动脚本之前尝试取消设置DISPLAY环境变量,看看会发生什么。

但是,如果您的程序不加区分地启动xterm个窗口,那么您必须将其设置为使用服务器上的输出文件 - 必要时通过修改它。作为一个额外的优势,您可以摆脱转发X连接所涉及的网络负载和时序开销。

如果您无法更改程序的工作方式而您实际上并不关心那些xterm窗口中的输出,那么您可以尝试在远程系统上启动virtual framebuffer X server并让您的脚本使用适用于xterm