我正在使用远程Debian Jessie服务器。我已经开始了屏幕会话,开始运行脚本,然后由于网络超时而断开连接。

现在我再次登录并想要恢复会话。

列出屏幕时,我会看到以下内容: />
我似乎一次连接到两个屏幕。

现在我想恢复之前运行的会话,以查看脚本的结果:

$ screen -ls
There are screens on:
    30608.pts-8.myserver    (11/03/2015 08:47:58 AM)    (Attached)
    21168.pts-0.myserver    (11/03/2015 05:29:24 AM)    (Attached)
    7006.pts-4.myserver (10/23/2015 09:05:45 AM)    (Detached)
    18228.pts-4.myserver    (10/21/2015 07:50:49 AM)    (Detached)
    17849.pts-0.myserver    (10/21/2015 07:43:53 AM)    (Detached)
5 Sockets in /var/run/screen/S-me.


为什么我不能重新连接?

我在另一个屏幕上也遇到相同的问题: br />

#1 楼

该会话仍附加在另一个终端上。服务器尚未在该连接上检测到网络中断:它仅在尝试发送数据包时检测到中断,并在超时后返回错误或无响应,但这尚未发生。在一种常见的情况下,客户端检测到中断是因为客户端试图发送一些输入而失败,但是服务器只是坐在那里等待输入。最终,服务器将发送一个保持活动的数据包并检测到连接已死。

同时,使用-d选项将屏幕会话与其所在的终端分离。

screen -r -d 30608


screen -rd几乎是附加到现有屏幕会话的标准方法。

评论


要附加到现有的屏幕会话,它是屏幕-x,屏幕-rd是要在将它与所连接的每个终端分离之后附加到它。对于OP,我同意后者可能是首选,但在一般情况下,不一定。我通常使用-xR进行附加或创建,如果没有附加内容。

–StéphaneChazelas
2015年11月7日在21:56



#2 楼

根据手册,您只能“恢复”分离的屏幕:


'-ls [match]'
'-list [match]'
不要启动屏幕,而是打印会话标识字符串的列表(通常为pid.tty.host形式;请参阅会话名称)。标记为“已分离”的会话可以使用screen -r恢复。那些标记为“已连接”的设备正在运行并具有控制终端。如果会话以多用户模式运行,则标记为“多”。标记为“无法访问”的会话位于其他主机上,或者已死。如果无法访问的会话的名称与本地主机的名称或指定的参数(如果有)匹配,则认为该会话无效。有关如何构造匹配项的说明,请参见-r标志。标记为“已死”的会话应彻底检查并删除。如果不确定,请询问系统管理员。使用“ -wipe”选项删除会话。


您想要的选项是:


'-x'
附加到已附加在其他位置的会话(显示模式)。屏幕拒绝从自身内部附着。但是,当级联多个屏幕时,不会检测到循环。照顾自己。


评论


使用-x,会话仍将“附加”。要完全接管会话,应将-d | -D(分离选项)与-r | -R(重新连接选项)一起使用。

–安德鲁·科兹洛夫(Andrew Kozlov)
2015年11月3日,9:37

这是一种替代方法,但可能不是OP所需要的。我经常从多个位置挂靠。

–托马斯·迪基(Thomas Dickey)
2015年11月3日,9:40

#3 楼

我将屏幕附加到选项-rD

来自手册:

-D -r
Reattach a session. If necessary detach and logout remotely first.