Linuxの便利コマンド、screenコマンドを使ってみた
会社の先輩から教えてもらったscreenコマンドが便利で、リモートワークをするときにとても役立つので、自分のメモとしてまとめます。
screenコマンドの役割と使い方は後述しますが、使ったことがない&初めて知った方はぜひ使ってみてください!
使うようになったきっかけ
新型コロナウイルスが流行し、3月上旬からリモートワークが始まるようになりました。
今まではローカル(Windows)でコードを動かしていたのですが、データに関するセキュリティの観点から、仮想環境(Linux)でコードを動かすことに。
仮想環境を立ち上げると同時に会社のSSHに接続するため(というより接続しないと動かせない)、コードを実行したあとに突然ネットワークの不調でSSHの接続が切れてしまうとなると、コードの実行も止まってしまいます。
業務ではなかなか処理が重いコードを動かしているため、一度接続が切れてしまうとやり直しをするのにも時間がかかっていました。
先週、定時近くにコードを動かしてしまい、SSHが切れないように業務用のノートパソコンの電源をつけっぱなしにしてもいいか会社の先輩に聞いたところ、Linuxのscreenコマンドを教えてもらいました。
screenコマンドとは
screenコマンドを使用すると、以下のことができます。
- シェルのセッションを保存できる
- 1つのSSHセッションで、複数のシェルウィンドウが開ける
- ネットワークが切断しても、シェルは動かしたままにできる
- シェルのセッションをアクティブにし続けていなくても、実行時間が長いプロセスを行うことができる
つまり、screenコマンドを使用してセッションを保存すれば、パソコンの電源を消してもコードを回すことができます。
また、SSHが突然切断してしまってもscreenセッション内で動かしていれば、プログラムの実行が中断されるようなことがなくなります。
後述するインストール方法と使い方では、Linuxのターミナルで動かすコマンドをまとめます。
インストール方法
会社用の仮想環境では既にインストール済み&勝手にいじってもダメなので、自分の仮想環境(Ubuntu)で試してみました。
このコマンドは、Debianでインストールをするときも同様のようです。
$apt install screen
同じLinuxでも、CentOSの場合は以下のコマンドでインストールするようです。
$yum install screen
これで、インストールは完了です。
使い方
インストール方法ではOSによって使用するコマンドが違いましたが、使い方で紹介するコマンドはUbuntu、Debian、CentOS全て共通です。
念のため言っておきますが、スクショの画像は自分のパソコン内の仮想環境のものです!笑
SSHに接続するときは普段通りにSSHコマンドを使用して、screenコマンドを使う前に接続しておきます。
ターミナルを立ち上げて準備ができたら、まず最初に新しいscreenセッションを作成します。
$screen
上記のコマンドを入力してもターミナルに何も変化がないように見えるかもしれませんが、既に新しいscreenセッションの中にいます。
この状態をAttachedといいます。
この状態で普段通りにpythonファイルを実行すると、screenセッション内でプログラムが実行されます。
実行したあとは、Ctrl + a を押し(この時点では画面は何も変わらないです)、dを入力すると以下の画像のように英文(detached from ~)が出てきます。
この英文が出てきたら、screenセッションから離れた状態になったことを表しています。
この状態をDetachedといいます。
Detachedになったら、SSHを切断したりパソコンの電源を消しても、screenセッション内でプログラムが実行し続けます。
作成したscreenセッションがどのような状態か確認したい場合は、以下のコマンドを入力します。
$screen -ls
すると、以下のような画像の文字が出力されます。
画僧の中にある、1800.pts-0.kali や 1765.pts-0.kali は、セッションIDです。
セッションIDは、screenコマンドで新しく作成した分だけ表示されます。
各セッションIDの横にある、(Attached) や (Detached) は、セッションの状態を表しています。
Detachedの状態のものをAttachedにしたい場合、以下のコマンドを入力します。
$screen -r {セッションID}
このコマンドを入力すると、選択したscreenセッションに再び入ることができます。
以上が基本的なscreenコマンドの使い方です。