「一晩サーバーに仕事を投げて、翌日結果を見たい!」
「学校でサーバーにタスクを投げて、後で家で確認したい!」
「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を使い始めたので基本的な機能の使い方とかを整理してみた - 完熟トマトによると、RHEL系Linuxでは「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
が大変参考になります。