GNU Screenを使いこなす:SSH接続が切れてもターミナルを「維持」する究極のテクニック

Linux tutorial - IT technology blog
Linux tutorial - IT technology blog

SSH接続中の悪夢「Broken Pipe」

SSH経由でサーバーを管理している方なら、誰もが一度はこの経験があるはずです。100GBのログファイルを圧縮している最中や、数百万件のデータベース移行スクリプトを実行している最中に、突然ネットワークが切断される。その結果、セッションが切断(Broken pipe)され、実行中だったプロセスも即座に停止してしまいます。数時間の待ち時間が一瞬にして水の泡になる瞬間です。

実際、ネットワークの切断やPCの電源トラブルは避けられないリスクです。これを根本的に解決するために、私は常に重要タスクの「保険」としてGNU Screenを使用しています。このツールを使えば、独立したセッションを作成できます。たとえターミナルウィンドウを閉じたり、接続が突然切れたりしても、プロセスはサーバー上でバックグラウンド実行され続けます。

30秒でできるGNU Screenのインストール

現在のほとんどのLinuxディストリビューションは、公式リポジトリでScreenをサポートしています。インストールは数秒で完了します。

UbuntuまたはDebianの場合:

sudo apt update && sudo apt install screen -y

CentOS、AlmaLinux、またはRHELの場合:

sudo dnf install screen -y

インストール後、screen -vを入力してください。バージョン情報が表示されれば、準備完了です。

DevOpsに必須のScreenコマンド

Screenの最大の特徴は、操作のキーコンビネーションです。すべての操作はCtrl+a(プレフィックスキー)から始まり、その後に機能キーを押します。

1. セッションの作成と命名

後で区別しにくくなるため、単にscreenと打つのではなく、作業内容に合わせた名前を付けましょう:

screen -S update_system

これで安全なセッション内に入りました。ここでyum updateや大規模なデータの<a href="https://itfromzero.com/ja/linux/rsync%e3%81%a7linux%e3%81%ae%e3%83%95%e3%82%a1%e3%82%a4%e3%83%ab%e3%82%92%e5%8a%b9%e7%8e%87%e7%9a%84%e3%81%ab%e5%90%8c%e6%9c%9f%e3%81%99%e3%82%8b%e6%96%b9%e6%b3%95.html">rsync</a>を開始したとしましょう。

2. 離脱(Detach)と再接続(Reattach)

これが最も価値のある機能です。スクリプトを実行したままPCを閉じてカフェに行きたいときは、Ctrl+aを押した後にdを押します。画面に[detached]と表示されます。

数時間後、別のPCからサーバーに再ログインします。実行中のセッションリストを確認するには、次を使用します:

screen -ls

実行中のセッションに復帰するには:

screen -r update_system

3. 複数ウィンドウの管理(Windows)

バラバラに複数のセッションを作るのではなく、1つのセッション内に複数のウィンドウを作って管理するのが効率的です:

  • Ctrl+a c: 新しいウィンドウを作成します(例:1つでログを表示し、もう1つでコマンドを打つ)。
  • Ctrl+a n: 次のウィンドウに素早く切り替えます。
  • Ctrl+a “: ウィンドウリストをメニュー形式で表示して選択します。

.screenrcをカスタマイズしてプロ仕様にする

Screenのデフォルト画面はシンプルすぎて、自分がどのウィンドウにいるか忘れがちです。私はよく画面下部にステータスバーを追加して、状況を把握しやすくしています。

設定ファイル nano ~/.screenrc を開き、以下のコードを貼り付けてください:

startup_message off
hardstatus alwayslastline
hardstatus string '%{= kG}[ %{G}%H %{g}][%= %{= kw}%?%-Lw%?%{r}(%{W}%n*%f%t%?(%u)%?%{r})%{w}%?%+Lw%?%?%= %{g}][%{B} %m/%d %{W}%c %{g}]'
defscrollback 10000

この設定により、ホスト名、開いているウィンドウのリスト、そして日時が画面下部に表示されます。特に defscrollback 10000 の行は、過去の出力を10,000行まで遡って確認できるようにします。

実践テクニック:screen -x で同僚とデバッグ

あまり知られていない非常に便利な機能があります。それはマルチディスプレイです。解決が難しいエラーに直面し、同僚に助けてもらいたい場合、二人がサーバー上の同じユーザーにログインします。同僚は次のように入力するだけです:

screen -x [セッション名]

瞬時に、二人は同じターミナル画面を共有します。あなたが入力をすれば相手にも見え、その逆も同様です。これは、サードパーティ製ソフトを入れずに、非常に効果的な「ペアプログラミング」や新人へのトラブルシューティング指導を行う方法です。

なぜTmuxがあるのに、いまだにScreenなのか?

多くの人は、よりモダンな tmux を勧めるでしょう。しかし、私のツールボックスには常にScreenが入っています。理由は単純です。Screenは非常に軽量で、ほとんどの古いLinuxシステムや最小構成(Minimal install)の環境にも標準で入っているからです。顧客の「骨董品」のような古いサーバーに遭遇しても、Screenは常に安定して動作し、信頼できます。

最後の注意点:本番環境で重要なコマンドを実行するときは、Ctrl+a H でログ機能をオンにする癖をつけましょう。画面に表示されるすべての内容が screenlog.0 ファイルに記録されるため、トラブルが起きた際の証拠や確認に役立ちます。

このテクニックが、ネットワークの安定性を心配することなく、より自信を持ってサーバー管理を行う一助となれば幸いです。

Share: