tmuxの使い方:一晩サーバーに仕事を投げて、翌日結果を見たい!

「一晩サーバーに仕事を投げて、翌日結果を見たい!」
「学校でサーバーにタスクを投げて、後で家で確認したい!」
Windows Updateが始まってssh接続が切れてしまった…つらい…」

こんな場面はしばしばあります。普通にssh接続をしている場合、接続を切るとタスクが止まってしまいます。すると上記のような場合、sshで接続している自機を一晩中つけておいたり、学校から家までsshの接続をずっと保っておくわけには行きません。Windows Updateなどで強制的にsshが切られたらもっと嫌です。

そんな時にはtmuxを使います。tmuxはかなり多くの機能があるのですが、上記の用途だけなら2, 3個コマンドを覚えるだけで十分です。

tmuxの詳しい動作原理はtmuxを使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマトの「tmux利用のイメージ図」がわかりやすいです。ごく簡単に言うと、tmuxはサーバー側に仮想端末を包み込んだ(アタッチした)プロセスを走らせておきます。この仮想端末はsshを切っても裏で動き続けてくれるので、一晩寝ていても裏でタスクを走らせ続けることができるのです。

tmuxの使い方については主に下記のサイトを参考にしました。
tmuxを使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマト
www.task-notes.com

1. サーバー側でtmuxをインストール

まずはターミナルからtmuxをインストールします。

Ubuntuの場合、下記でインストールします:

sudo apt-get install tmux

これでインストール出来ない場合はtmux installation steps for Ubuntu · GitHubが参考になるかもしれません。

Mac OS Xの場合、Homebrewをインストールした状態で下記でインストールします:

brew install tmux

また、tmuxを使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマトによると、RHELLinuxでは「EPELリポジトリにパッケージが存在しますのでyumでパッケージをインストールできます」:

yum install http://dl.fedoraproject.org/pub/epel/6/x86_64/tmux-1.6-3.el6.x86_64.rpm

また、tmuxの基本的な使い方とコマンドのまとめ - TASK NOTESによると、CentOSの場合は「EPELリポジトリを追加してインストールします」:

rpm -i http://ftp.riken.jp/Linux/fedora/epel/6/x86_64/epel-release-6-8.noarch.rpm
yum -y install tmux

2. 作業開始:tmuxを起動

いよいよtmuxを使います。まず、sshで処理を行いたいサーバーへ接続します。そして、

tmux

を実行します。すると、仮想端末(セッション)が開始します。

仮想端末は閉じたり開いたりするので、名前をつけておきます。そのためには「Control - b」「$」と続けて押します。(Controlで操作するのはemacsに似ていますね。)その後、セッション名を入力してEnterで名前がつきます。

tmux起動と同時にセッションに名前を付けるには

tmux new-session -s <session-name>

とします。

さて、名前のついたセッションを起動しました。セッションは普通の端末と同じように使えるので、一晩投げたいタスクをここで実行します。

3. 作業中断:セッションのデタッチ

タスクも実行開始した所で、いよいよ一晩寝る時がやってきました。セッションをデタッチするには、「Control - b」「d」と続けて押します。すると、仮想端末から抜けて普通の端末に戻ります。
しかし、裏ではtmuxの仮想端末がちゃんと動いています。この普通の端末で

tmux ls

を実行してみましょう。すると、先ほど名前をつけた端末が裏で走っています。

デタッチしたセッションを再びアタッチするには、

tmux a -t <session-name>

とします。これで、先ほどの処理の実行途中でも、その端末の様子を見ることが出来ます。

ここでサーバーとのssh接続を切って、再び接続し、同じくtmux lsを実行しても、やはり裏で仮想端末が走り続けてくれています。
これで、安心して一晩寝ることが出来ます。

4. 作業復帰:セッションのアタッチ

新しい朝がやって来ました。進捗確認のため、サーバーにsshで接続し、先ほどのように

tmux a -t <session-name>

を実行します。セッション名を忘れたらtmux lsで確認すれば大丈夫です。

これで一晩寝られる!

これで、あなたもサーバーにタスクを投げて一晩寝られるようになりました。

tmuxにはここで紹介した他にも色々な便利な機能があります。詳しくは、
tmuxを使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマト
tmuxの基本的な使い方とコマンドのまとめ - TASK NOTES
が大変参考になります。