無法恢復螢幕,顯示我已連線?

無法恢復螢幕,顯示我已連線?

我正在遠端 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>

這將直接將您附加到螢幕,而不會終止附加的使用者。這主要用於多用戶顯示。

相關內容