我已经连接了,无法恢复屏幕吗?


151

我正在使用远程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.

我似乎一次附属于两个屏幕。

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

$ screen -r 30608.pts-8.myserver
There is a screen on:
    30608.pts-8.OpenPrescribing (11/03/2015 08:47:58 AM)    (Attached)
There is no screen to be resumed matching 30608.pts-8.myserver.

为什么我不能重新连接?

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

$ screen -r 21168.pts-0.myserver
There is a screen on:
    21168.pts-0.OpenPrescribing (11/03/2015 05:29:24 AM)    (Attached)
There is no screen to be resumed matching 21168.pts-0.myserver.

Answers:


241

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

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

screen -r -d 30608

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


15
要附加到现有的屏幕会话,它的screen -xscreen -rd是从具有离之后附加到它每次它被连接到终端。对于OP,我同意后者可能是首选,但在一般情况下,不一定。我通常使用-xR附加或创建内容来附加任何内容。
斯特凡Chazelas

10

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

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

您想要的是此选项:

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


4
随着-x会话仍然会附加“某处”。要完全接管会话,应将-d | -D(分离选项)与-r | -R(重新连接选项)一起使用。
安德鲁·科兹洛夫

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.