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

2019年7月8日

SSH

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

時間がかかるコマンドをサーバ上で実行する場合、SSH の接続が切れても大丈夫なように、バックグラウンド実行にしたり、SSH の設定を調整してセッションが切れないようしたりする必要があるのですが、こういう場合は tmux を使うのがおすすめです。途中で接続が切れても大丈夫。

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

目次

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

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

tmux は yumapt などでインストールできます。詳細は Installing · tmux/tmux Wiki を参照。

$ yum install tmux

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

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

$ tmux new-session -s hogehoge

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

以下の画像では sleep 300コマンドを実行しています。

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

画面スクロールをする

tmux のセッション上でログを確認したいとき、スクロールができなくて困ることがあります。

このような時はControl + b でコマンドモードにした後、[キーでスクロールモードにします。その後は上下キーで画面外の出力を確認することができます。

-技術ブログ
-