先日、サーバ上で非常に長い時間がかかるコマンドを実行する機会がありました。
時間がかかるコマンドをサーバ上で実行する場合、SSH の接続が切れても大丈夫なように、バックグラウンド実行にしたり、SSH の設定を調整してセッションが切れないようしたりする必要があるのですが、こういう場合は tmux を使うのがおすすめです。途中で接続が切れても大丈夫。
この記事では、tmux 上でコマンドを実行し、一度 SSH の接続を切ったあと、再び SSH 接続をしてコマンドの状況を確認する方法を説明します。
目次
サーバに tmux をインストールする
tmux は yum
や apt
などでインストールできます。詳細は Installing · tmux/tmux Wiki を参照。
$ yum install tmux
名前付きセッションを作成する
以下のコマンドで名前付きのセッションを作成します。
$ tmux new-session -s hogehoge
実行すると以下のように緑色の帯が画面下に出る状態になります。セッション名が左下に表示されます。この状態で、時間のかかるコマンドを実行します。
以下の画像では sleep 300
コマンドを実行しています。
セッションから抜ける
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
でコマンドモードにした後、[
キーでスクロールモードにします。その後は上下キーで画面外の出力を確認することができます。