私はリモート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.
2つの画面に同時に接続されていると思います。
それでは、以前に実行したセッションを再開してスクリプトの結果を確認します。
$ 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
[マッチ]'
画面を起動せずにセッション識別文字列のリストを印刷します(通常はpid.tty.host形式です。セッション名を参照)。「分離済み」とマークされたセッションは、次の方法で復元できます。screen -r
。 「追加」と表示されている項目は実行中で、制御端末があります。セッションがマルチユーザーモードで実行されている場合は、「マルチ」と表示されます。 「アクセスできません」とマークされたセッションは、他のホストに存在するか、動作しません。接続できないセッションは、その名前がローカルホスト名または指定されたパラメータ(存在する場合)と一致する場合は中断されたと見なされます。-r
一致を作成する方法については、フラグをご覧ください。 「死」とマークされたセッションは、徹底的に確認して削除する必要があります。わからない場合は、システム管理者にお問い合わせください。セッションを削除するには、「」オプションを使用します-wipe
。
必要なのはこのオプションです。
'
-x
'
すでに他の場所に接続されているセッションに接続します(マルチディスプレイモード)。画面はそれ自体の内部から取り付けることを拒否します。ただし、複数の画面をカスケード接続するとループは検出されませんのでご注意ください。
答え3
screen
optionsに追加しています-rD
。
ドキュメントを参照してください。
-D -r
Reattach a session. If necessary detach and logout remotely first.
答え4
私が知る限り、2つの方法があります。
- screen -rd <画面名/ID>
これで画面が切り離され、再接続されます。事前接続ユーザーの画面が消えます。
- screen -x <画面名/ID>
これにより、接続されたユーザーを終了せずに画面に直接接続できます。これは主にマルチユーザーディスプレイに使用されます。