Bash 无法使用'成功断开与远程计算机的连接;诺胡普';或';屏幕';
我正在尝试在远程机器上执行一些工作,并在不终止工作的情况下断开连接。我已经试过了Bash 无法使用'成功断开与远程计算机的连接;诺胡普';或';屏幕';,bash,ssh,nohup,xterm,Bash,Ssh,Nohup,Xterm,我正在尝试在远程机器上执行一些工作,并在不终止工作的情况下断开连接。我已经试过了nohup和screen,不幸的是它不起作用。在我键入退出后,我的工作也会立即终止 我试图在一台远程机器上运行108次模拟。为此,我编写了一个名为batch.sh的脚本,它一个接一个地运行模拟,直到所有108个都完成。实际运行模拟的程序在5个不同的终端上启动5个程序(使用xterm-e)。我使用以下方法运行batch.sh nohup bash batch.sh& 只要我有联系,一切都很好。如果我断开连接,然后重新连
nohup
和screen
,不幸的是它不起作用。在我键入退出后,我的工作也会立即终止
我试图在一台远程机器上运行108次模拟。为此,我编写了一个名为batch.sh
的脚本,它一个接一个地运行模拟,直到所有108个都完成。实际运行模拟的程序在5个不同的终端上启动5个程序(使用xterm-e
)。我使用以下方法运行batch.sh
nohup bash batch.sh&
只要我有联系,一切都很好。如果我断开连接,然后重新连接,以检查是否一切都正常工作…没有乐趣:(
我是否忽略了任何警告?可能是因为我的程序在外部终端上启动了其他程序
更新
如果我在启动脚本之前使用将-oForwardX11=no
添加到ssh
并取消设置DISPLAY
的建议,我会收到以下错误:
nohup:忽略输入并将输出附加到nohup.out
在nohup.out
中,我有以下消息:
xterm Xt错误:无法打开显示:
xterm:DISPLAY未设置
显然,您的脚本/程序正试图自行启动xterm
。目前,许多系统默认为其SSH客户端启用X11转发-因此,DISPLAY
变量在shell会话中设置,但一旦断开连接,该变量将无效。因此,只要当您连接到远程系统时,xterm
进程可以通过SSH连接访问本地机器上的X服务器,但一旦该连接断开,该进程就会死亡
我偶尔在使用Java AWT子系统生成图像文件的Java程序中遇到同样的问题,即使在没有实际的图形窗口的情况下也是如此。您应该首先看看如果没有可用的X服务器,您的程序是否会以某种方式进行适配。一个选项是使用oForwardX11=no的-oForwardX11=no
操作禁用X11转发连接到sshssh
:
$ ssh -oForwardX11=no user@server.host.name
在启动脚本之前,您还可以尝试取消设置DISPLAY
环境变量,看看会发生什么
但是,如果您的程序不分青红皂白地启动xterm
windows,则您必须使其运行,例如,在服务器上使用一个输出文件,如有必要,可以对其进行修改。作为一个附加优势,您可以摆脱与转发X连接有关的网络负载和定时开销
如果您无法更改程序的工作方式,并且您实际上并不关心那些xterm
窗口中的输出,那么您可以尝试在远程系统上启动一个,并让您的脚本将其用于xterm
我尝试了您的建议(-oForwardsX11=no
并取消设置显示
)但这不起作用。nohup
用nohup回复:忽略输入并将输出附加到nohup.out.Innohup.out
我有以下消息:xterm Xt错误:无法打开显示:并且xterm:display未设置。事实上,我的脚本正在启动多个xterm
。我真的需要这些。@cfbaptista:查看我的更新。TL;DR:eitherr修改您的程序,使其不启动xterm
会话,或使用虚拟X服务器…我可以修改我的程序,但我确实关心xterm
输出。输出用于日志记录。但是,我不需要在运行时查看输出。只有在完成后,如果出现问题。您能否提供有关什么的更多信息你想让我做什么?@CbCaptista:在这种情况下,你可以将输出附加到一个文件中——可能不止一个——而不是启动一个xterm
。像这样的问题属于。就在这里。@MartinPrikryl有没有一种简单的迁移方法?或者我必须在那里开始一个新的问题?一旦你有了答案,你必须标记你的问题适度的注意,让它移动。