无法恢复屏幕,说我已附加?

Ric*_*ard 224 gnu-screen

我正在远程 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.
Run Code Online (Sandbox Code Playgroud)

我似乎同时被两个屏幕所吸引。

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

$ 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.
Run Code Online (Sandbox Code Playgroud)

为什么我不能重新连接?

我在另一个屏幕上有同样的问题:

$ 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.
Run Code Online (Sandbox Code Playgroud)

Gil*_*il' 368

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

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

screen -r -d 30608
Run Code Online (Sandbox Code Playgroud)

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

  • 要附加到现有的屏幕会话,它是`screen -x`,`screen -rd` 是在将它从*每个* 附加到的终端上分离后附加到它。在 OP 的情况下,我同意后者可能更受欢迎,但在一般情况下,不一定。如果没有要附加的内容,我通常使用 `-xR` 来附加或创建。 (24认同)

Tho*_*key 15

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

' [match] ' ' [match] ' 不启动屏幕,而是打印会话标识字符串列表(通常格式为 pid.tty.host;请参阅会话名称)。标记为“分离”的会话可以使用 恢复。那些标记为“附加”的正在运行并且有一个控制终端。如果会话在多用户模式下运行,它会被标记为“多”。标记为“无法访问”的会话要么存在于不同的主机上,要么已死亡。当一个无法访问的会话的名称与本地主机的名称或指定的参数(如果有)匹配时,它被认为是死的。见-ls
-list
screen -r-r用于描述如何构建匹配的标志。应彻底检查并删除标记为“死”的会话。如果您不确定,请咨询您的系统管理员。使用“ -wipe”选项删除会话。

你想要的是这个选项:

' -x'
附加到已附加到别处的会话(多显示模式)。屏幕拒绝从自身内部附着。但是在级联多个屏幕时,没有检测到循环;小心。

  • 使用“-x”,会话仍将附加到“某处”。要完全接管会话,应使用 -d|-D(分离选项)和 -r|-R(重新附加选项)。 (5认同)

小智 8

我附有选项的屏幕 -rD

从手册:

-D -r
Reattach a session. If necessary detach and logout remotely first. 
Run Code Online (Sandbox Code Playgroud)