シェルを閉じても処理を続行 screenコマンドの使い方

Linux

長時間の計算やコンパイルをしている間に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コマンド

よく使うコマンドはこちらです。

コマンド内容
screenscreenを起動する。
screen -rデタッチされたscreenの中に入る。(アタッチ)
複数のscreenがある場合はscreen -lsでIDを調べて
screen -r [ID] で入る。
screen -rxアタッチされているscreenに強制的に入る。
screen -lsscreenの一覧とIDを表示する。
screen -hscreenのヘルプを表示する。

screenの中では[Ctrl]と[a]のキーを同時押しして、その次に1つのキー入力を行います。よく使うコマンドはこちらです。

コマンド内容
Ctrl a 同時押し → dscreenを一時的に離れて通常の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コマンドにはさらに多くのテクニックが存在しますが、ここでは触れません。また私もそこまで高度な機能は使っていません。基本機能を使うだけでも十分だと思っています。

コメント

タイトルとURLをコピーしました