无法恢复屏幕,显示我已连接?

无法恢复屏幕,显示我已连接?

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

答案1

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

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

screen -r -d 30608

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

答案2

根据手动的你只能“恢复”超然的屏幕:

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

你想要的是这个选项:

'-x'
附加到已附加到其他地方的会话(多显示模式)。屏幕拒绝从其自身内部附加。但在级联多个屏幕时,不会检测到循环;请小心。

答案3

我附加到screen选项-rD

请参阅手册:

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

答案4

据我所知有两种方法:

  1. screen -rd <屏幕名称/id>

这将分离屏幕并重新连接您。它将关闭任何预先连接的用户的屏幕。

  1. screen -x <屏幕名称/id>

这将直接将您附加到屏幕,而不会终止附加的用户。这主要用于多用户显示。

相关内容