長時間の計算やコンパイルをしている間にshell(ターミナル)を閉じてしまうと処理が中断してしまいます。間違えて閉じてしまうこともあれば、ネットワーク不調などにより意図せずSSH接続が閉じられてしまうこともあります。そんな時に役に立つscreenコマンドについて解説します。
長い時間がかかる処理は死なないshell「screen」を使って実行しよう!
screenとは
screenコマンドを使うことで、shellの中に仮想的なshell「screen」を作ることができます。
この仮想的なshellの特徴は、
- 1つのshell内に複数の仮想的なshellを作り、切り替えることができる。(タブを切り替えるイメージ)
- shellを閉じても仮想shell内の処理は続行。
- 閉じた後に再度同じshellで操作を再開できる。
- 操作性は通常のshellと同じ。
つまりこのscreenを使うことで、shellを閉じることによる処理の中断が起こらなくなります。さらに、1つの画面内で複数のshellを開くことができるので、作業内容によっては非常に効率よく作業を進めることができます。
Linux環境には最初からインストールされていることが多いですが、インストールする場合は
apt install screen
yum install screen
といった形でインストールができます。
よく使うscreenコマンド
よく使うコマンドはこちらです。
コマンド | 内容 |
---|---|
screen | screenを起動する。 |
screen -r | デタッチされたscreenの中に入る。(アタッチ) 複数のscreenがある場合はscreen -lsでIDを調べて screen -r [ID] で入る。 |
screen -rx | アタッチされているscreenに強制的に入る。 |
screen -ls | screenの一覧とIDを表示する。 |
screen -h | screenのヘルプを表示する。 |
screenの中では[Ctrl]と[a]のキーを同時押しして、その次に1つのキー入力を行います。よく使うコマンドはこちらです。
コマンド | 内容 |
---|---|
Ctrl a 同時押し → d | screenを一時的に離れて通常のshellに戻る。(デタッチ) |
Ctrl a 同時押し → c | 現在のscreenを残したまま新しいscreenを作り、新しいscreenに切り替える。 |
Ctrl a 同時押し → n | 隣のscreenに切り替える。押すたびに切り替わり、ループする。 |
Ctrl a 同時押し → k | 現在のscreenを閉じる。(kill) |
Ctrl a 同時押し → w | 生きているscreenの数などを確認する。 |
Ctrl a 同時押し → 数字 | wで確認した番号のscreenに直接切り替える。 |
Ctrl a 同時押し → ? | screen内のヘルプを確認する。 |
screenはブックとページの関係
用語として正しいかは分かりませんが、ブックとページという言葉で説明したいと思います。
shell上でscreenコマンドを打った際に作られるのはブック、つまり本やノートのようなものです。このブックにはデフォルトでは1つのページが存在し、そこでコマンドを実行できます。
Ctrl-a cでscreenを増やすことは、その本にページを追加することに対応します。そしてCtrl-a nを押すごとにページを切り替えることができます。
デタッチ操作でブックを一時的に閉じて、アタッチ操作でそのブックを再度開くことができます。
そして少しややこしいのですが、このブックは複数個作ることができます。
screenがすでに作られているのに、アタッチせずにさらにもう一つのscreenを作ってしまうことがあります。意図してやるならいいのですが、私は意図せず間違えて作ってしまうことが多々あります。これは複数のブックがある状態です。このそれぞれのブックにページを多数作ってしまうと、アクセスしたいページがどちらのブックにあるのか分からなくなってしまいます。このような時は、screen -lsコマンドを使用することで複数のブックの名前(ID)を確認でき、screen -r [ID]でブックを名指しして開くことができます。
screenは計算用途で使うと便利
長時間の計算コマンドをscreen内で実行するメリットは以下のものが挙げられます。
- 計算中にshellを開きっぱなしにしなくていい。
- SSH接続が切れてもscreen内で計算コマンドが生き続けている。
- 再接続/再ログイン時にscreenにアタッチすることで元の環境を開くことができる。
- 計算中にCtrl a → c で新しいscreenを開いて、計算と同時並行で別の作業ができる。計算の進捗具合もCtrl a → nですぐに確認できる。
- 複数のscreenで複数の計算ジョブを同時並行で流すことができる。
このように、計算用途でもかなり役に立ちます。
注意点
screenを使用する際、自分の現在地を常に意識しておかないと混乱します。自分が現在screenの中に居るのか、外側のshellに居るのか、ということです。screenの内外を行ったり来たりしているとよく分からなくなります。
また、screenコマンドにはさらに多くのテクニックが存在しますが、ここでは触れません。また私もそこまで高度な機能は使っていません。基本機能を使うだけでも十分だと思っています。
コメント