名前付きスクリーン セッションを再接続または作成しますか? (または永続的なスクリーン セッション)

名前付きスクリーン セッションを再接続または作成しますか? (または永続的なスクリーン セッション)

基本的に、リモート スクリーン セッションがあり、これに自動的に再接続したいと考えています。現在、次のコマンドを使用してこれを実行しています (iTerm ブックマークまたはエイリアスとして)

ssh host -t screen -x thesessionname

これはうまく動作しますが、何らかの理由でセッションが切れた場合は、次回接続したときに再作成したいと思います。-Rフラグscreenほとんど完璧:

ssh host -t screen -R -S thesessionname

ただし、セッションがすでに接続されている場合は、2 番目のセッションが作成されます ( -Rsimple は最初のデタッチされたセッションを検索し、見つからない場合は新しいセッションを作成します)

フラグが接続されたセッションも検索し、存在しない-R場合にのみ新しいセッションを作成するようにする方法はありますか?thesessionname

これが簡単に実行できない場合、スクリーン セッションが終了したときに自動的に再作成するにはどうすればよいでしょうか。おそらく、指定されたセッションを検索するスクリプトを cron 経由で実行し、存在しない場合は作成するのでしょうか。

答え1

もう少し粘り強く試行するように画面に指示します。

-D -R
    Attach here and now. In detail this means: If a session is run-
    ning,  then  reattach.  If necessary detach and logout remotely
    first.  If it was not running create it and  notify  the  user.
    This is the author's favorite.

したがって、これら 2 つを組み合わせると、解決策が得られます (「-DR」は「-D -R」と同等です)。

screen -DR <yoursession> 

さらに、知っておくと便利なのは、実行中のセッションを次の方法で表示できることです。

screen -ls

答え2

良い選択肢がいくつかあります。まず、私のお気に入りは:

screen -x -R

これにより、利用可能な最初のスクリーン セッションに接続され (別の接続が接続されている場合は共有されます)、スクリーン セッションがまったくない場合は、新しいスクリーン セッションが開始されます。

screen -d -RR

ドキュメントには、「セッションを再接続し、必要に応じて切断または作成します。複数のセッションが利用可能な場合は、最初のセッションを使用します。」と書かれています。基本的に、ダブル R は接続する最初のセッションを探します。

screen -D -RR

「今すぐ接続します。それが何を意味するにせよ、とにかく実行してください。」他の接続されたセッションを切断してリモートでログアウトし、接続できる最初のセッションに接続します。基本的に、既存のセッションに接続するために必要なことはすべて実行し、何もない場合は新しいセッションを作成します。

最初のオプション (-x -R) は、問題が発生する可能性が最も低い (他の接続が切断されない) ですが、接続するものがある場合は常に何かに接続し、接続するものがない場合は何かを作成します。

答え3

私が使う

screen -dRRS sessname

のように、他のシェルでのログイン全体が削除されることは望んでいませんし-D、 のマルチアタッチ モードも絶対に望んでいません-x

関連情報