我正在遠端 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
據我所知有兩種方法:
- screen -rd <螢幕名稱/id>
這將分離螢幕並重新連接您。它將關閉任何預先連接的用戶的螢幕。
- screen -x <螢幕名稱/id>
這將直接將您附加到螢幕,而不會終止附加的使用者。這主要用於多用戶顯示。