tmuxを使ってSSHの接続が切れてもコマンドを動かし続ける

 ツイート 0  シェア 0  Hatena 0

tmuxで時間がかかるコマンドを実行する

先日、サーバ上で非常に長い時間がかかるコマンドを実行する機会がありました。

時間がかかるコマンドをサーバ上で実行する場合、SSH の接続が切れても大丈夫なように、コマンドの後ろに & をつけてバックグラウンド実行にしたり、nohup コマンドを使ったり、SSH の設定で ServerAliveInterval 60 をして SSH のセッションが切れないようにあれこれ工夫する必要がありますが、tmux を使うと簡単かつ確実に時間のかかるコマンドを実行できるので私はこの方法をよく使います。

この記事では、tmux 上でコマンドを実行し、一度 SSH の接続を切ったあと、再び SSH 接続をしてコマンドの状況を確認する方法を説明します。

目次

  1. サーバ上に tmux をインストールする
  2. 名前付きセッションを作成する
  3. セッションから抜ける
  4. セッションに再びアタッチ

サーバ上に tmux をインストールする

tmux は yumapt-get でインストールできます。


$ yum install tmux
$ apt-get install tmux

名前付きセッションを作成する

以下のコマンドで名前付きのセッションを作成します。


$ tmux new -s hogehoge

実行すると以下のように緑色のバーが画面下に出る状態になります。セッション名が左下に表示されます。ここで時間のかかるコマンドを実行します。

tmuxで時間がかかるコマンドを実行する

セッションから抜ける

tmux 上でコマンドを実行するとターミナルがロックされた状態になります。Control + b でコマンドモードに変更した後、d キーでセッションから抜けることができます。コマンドは tmux 上で実行されていますので、そのまま SSH から抜けても大丈夫です。

ps コマンドで実行中のコマンドのプロセスを見ることもできます。


$ ps aux | grep sleep

ec2-user 32377  0.0  0.0 114684   736 pts/1    S+   02:42   0:00 sleep 300
ec2-user 32379  0.0  0.0 119484   964 pts/2    S+   02:43   0:00 grep --color=auto sleep

セッションに再びアタッチ

後日、別のコンソールなどでセッションにアタッチする際には tmux ls コマンドで既存のセッションやセッション名を確認して


$ tmux ls
    
hogehoge: 1 windows (created Mon Jul  8 02:00:08 2019) [88x18]

tmux attach -t セッション名 コマンドでアタッチします。


$ tmux attach -t hogehoge

 ツイート 0  シェア 0  Hatena 0