やくも

大学院生エンジニアリング日記、備忘録とか

Linuxコマンドをバックグラウンドで実行する

リモートサーバー上で作業をしている時、sshからログアウトしても処理を継続して欲しい場合があリマス(会社や研究室のGPUサーバーで機械学習モデルを学習させる場合など)。そんな時に使える便利コマンドの備忘録。方法は主に3つあります(他にもあるかも)。


  1. tmuxを使う方法
  2. screenを使う方法
  3. nohupを使う方法

3のnohupを使う方法が一番手軽だと思います。会社などのサーバーを使う時、権限周りの問題でtmuxやscreenをインストールできない場合があります。nohupであればそんな時にも実行可能なのが利点です。1つ1つ具体的な方法を見ていきましょう。

tmuxを使う方法

tmuxとは

tmuxとは1つの端末を複数に分割することが出来るツールです。
インストールは、

$ sudo apt install tmux

バックグラウンド実行

tmuxはsessionという単位で管理されていて、sessionはコンソールから切り離してバックグラウンドに残しておくことが出来ます。
tmuxを立ち上げると同時にsessionが作成されます。

$ tmux

sessionをコンソールから切り離すには、detachとattachを使います。
detachで離脱し、attachで復帰することが出来ます。
detach

$ [ctrl b] + d

attach

$ tmux a

sessionの確認

$ tmux ls

detachとattachはtmuxの便利機能の1つで、もっと色んな事が出来る。インフラエンジニアはtmuxを好んで使うらしいです。

screenを使う方法

screenとは

screenを使うと1つの端末上で複数の仮想端末を起動する事が出来ます。tmuxとscreenにはそれぞれ優れた点があるらしいが、正直あまり違いが分かりませんでした。tmuxの方が多少軽量らしいです。 インストールは、

$ sudo apt install screen

バックグラウンド実行

tmuxと同じように、sessionを起動してdetachする事でバックグラウンドでコマンドを実行しておく事が出来ます。
sessionの起動

$ screen

detach

$ [ctrl a] + d

attach

$ screen -r

sessionの確認

$ screen -ls

tmuxと同じく他にも便利機能がある。

nohupを使う方法

nohupとは

nohupとはlinuxの標準コマンドであり、ログアウト後にもバックグランドでコマンドを実行しておく事が出来ます。上述のtmuxやscreenなどと違う点はインストールや事前準備が必要ない事です。会社などの共用サーバーで勝手にsudo apt installが出来ない時にもnohupであれば使う事ができます。

バックグラウンド実行

バックグラウンドでコマンドを実行

$ nohup コマンド &

コマンドをnohupと&で挟むだけでバックグラウンド実行ができる。出力はデフォルトでは、nohup.outに書き出されます。出力先を変更したい場合は、

$ nohup コマンド > 出力先 $

とする。
また、順番に複数コマンドを実行したい場合は、

$ nohup -sh c 'コマンド1 ; コマンド2' &

とする。非常に簡単です。

まとめ

Linuxでコマンドをバックグランド実行するには、
1. tmux
2. screen
3. nohup
の3つの方法がある。
目的がコマンドのバックグラウンド実行のみの場合、nohupを使うのがもっとも手軽でおすすめです。