tmuxで複数サーバの同時オペレーション

投稿者: | 2014年1月9日

インフラ担当の池田(@mikeda)です。

tmuxを使い初めて1年くらいになりました。
今日はtmuxの、普段のオペレーションでよく使ってる機能を紹介します。

複数サーバで同時オペレーション

tmuxにはキー入力を全てのpaneで同期する機能があります。
この機能を使って複数paneでそれぞれ別のサーバにsshログインすると、

複数サーバに同じコマンドを打ったり、

multi_ssh_01

内容が同じ設定ファイルであればviで同時編集したりができます。

multi_ssh_02

同期する/しないはコマンドでも切り替えられますが、

set-window-option synchronize-panes on
set-window-option synchronize-panes off

tmux.confにショートカットを設定しておくと便利です。

bind e setw synchronize-panes on
bind E setw synchronize-panes off

複数サーバにログインして同時作業するためのスクリプトも作成してます。

#!/bin/bash

if [ -n "$SESSION_NAME" ];then
  session=$SESSION_NAME
else
  session=multi-ssh-`date +%s`
fi
window=multi-ssh

### tmuxのセッションを作成
tmux new-session -d -n $window -s $session
 
### 各ホストにsshログイン
# 最初の1台はsshするだけ
tmux send-keys "ssh $1" C-m
shift

# 残りはpaneを作成してからssh
for i in $*;do
  tmux split-window
  tmux select-layout tiled
  tmux send-keys "ssh $i" C-m
done

### 最初のpaneを選択状態にする
tmux select-pane -t 0

### paneの同期モードを設定
tmux set-window-option synchronize-panes on

### セッションにアタッチ
tmux attach-session -t $session

このスクリプトの引数に複数のログイン対象サーバを与えてやると

multi_ssh_03

全サーバにログインしてすぐに同時オペレーションが行えます。

multi_ssh_04

おまけ。他の人が作業してるターミナルをのぞく

休日の障害対応は各チームのメンバーがSkypeで連携しながらやっています。
その時に「〜〜の作業やります。サーバはXXX、セッション名はYYY」のような会話が出てくることがあります。
これが何をやってるかというと、、、

作業者が作業サーバでtmuxを起動して、

$ tmux new -s mikeda

確認者が指定されたセッションに対してattachしてやると

$ tmux attach -t mikeda -r

※追記:閲覧のみで充分なので、read-onlyオプションを追加しました(thx @hayajo

複数人で同じターミナルを操作できます。

tmux_20140109

この機能を利用して、『作業者』の実際のオペレーションを『確認者』や他の作業者がリアルタムで確認することで、より精度の高い連携を取っています。

※追記(thx @tnmt
上記の単純なattachでターミナルを共有できるのは、複数人が同じLinuxユーザを使える場合だけです。
個人アカウントなど、別ユーザ間でターミナルを共有する場合はwemuxを使うといいらしいです(まだ使ったことないw)。
新卒OJTにwemux(multi-user terminal multiplexing)を使って画面共有することにした

まとめ

というわけでtmuxでよく使ってる機能を簡単に紹介させてもらいました。

tmux、便利ですね。
最初は『ショートカット覚えるのだりぃ・・・』『コピペしづらい・・・』などグチグチ言ってたのですが、いつのまにか普段のオペレーションに欠かせないものになりました。

まだまだ知らないこと多そうなので、「この機能も便利だよ」ってのがあればぜひ教えて下さい!

※プログラミングの時はtmuxinatorが便利そうですね。また機会があれば紹介します。