GNU画面:中断されたリモートセッションから画面を再開できません。

GNU画面:中断されたリモートセッションから画面を再開できません。

時々、SSHシェル持つアクティブscreenセッション私のリモートサーバーに行き、壊れた(たとえば、インターネット回線はそれほど安定していません)セッションはまだ接続されています。

その後、SSHを介してサーバーに再接続し、復元しよう会議screen:

luis@Zarzamoro:~$ screen -r
There is a screen on:
        9166.pts-2.Zarzamoro    (12/23/15 23:47:34)     (Attached)
There is no screen to be resumed.
luis@Zarzamoro:~$ screen -r 9166.pts-2.Zarzamoro
There is a screen on:
        9166.pts-2.Zarzamoro    (12/23/15 23:47:34)     (Attached)
There is no screen to be resumed matching 9166.pts-2.Zarzamoro.

私はGNU画面についてはわかりません。なぜこのようなことが起こりますか?
可能ですか?また覆うこのscreen会議?

答え1

使用:

screen -r -d <pid>.<tty>.<host>

あなたの場合:

screen -r -d 9166.pts-2.Zarzamoro

これにより、反対側の画面が強制的に切り離され、接続されます。

答え2

2つの点:

  • 完全なpid +セッション名を指定する必要はありません(画面合理的な略語が許されます。)

  • このオプションを使用すると、より良い結果が得られます-x

~からマニュアルページ:

-r
セッション所有者/ [pid.sessionname] '回復優れたスクリーンセッション。

-x
既存のセッションに接続付属他の場所(マルチディスプレイモード)。画面はそれ自体の内部から取り付けることを拒否します。ただし、複数の画面がカスケード接続されている場合、ループは検出されませんので注意してください。

答え3

このようなことが時々私に起こります。私はあなたのttyが画面から適切に分離されていないので、サーバーに再接続してもまだ画面に「接続」されていると思います。

これが私がしたことです:

screen -d
screen -r (if you have only one screen)
screen -r <pid> (if you have more than one screen)

あなたもできます。

screen -r -d (add <pid> if you have more than one screen)

正しく接続されていない画面を取り外して再接続してください。

また、このときscreen -r全画面の名前を指定する必要なく、pid(4桁)のみ指定することができます。

答え4

以下のように自動化することもできます。ここ既存のスクリーンセッションに自動的に再接続されます(存在しない場合は新しいセッションを作成します)。

.bashrc

ターゲットホストの ~/.bashrc の上部に次の行を追加します。

# Auto-screen invocation. see: http://taint.org/wk/RemoteLoginAutoScreen
# if we're coming from a remote SSH connection, in an interactive session
# then automatically put us into a screen(1) session.   Only try once
# -- if $STARTED_SCREEN is set, don't try it again, to avoid looping
# if screen fails for some reason.
if [ "$PS1" != "" -a "${STARTED_SCREEN:-x}" = x -a "${SSH_TTY:-x}" != x ]
then
  STARTED_SCREEN=1 ; export STARTED_SCREEN
  [ -d $HOME/lib/screen-logs ] || mkdir -p $HOME/lib/screen-logs
  sleep 1
  screen -RR && exit 0
  # normally, execution of this rc script ends here...
  echo "Screen failed! continuing with normal bash startup"
fi
# [end of auto-screen snippet]

関連情報