インフラ担当の池田(@mikeda)です。
tmuxを使い初めて1年くらいになりました。
今日はtmuxの、普段のオペレーションでよく使ってる機能を紹介します。
複数サーバで同時オペレーション
tmuxにはキー入力を全てのpaneで同期する機能があります。
この機能を使って複数paneでそれぞれ別のサーバにsshログインすると、
複数サーバに同じコマンドを打ったり、
内容が同じ設定ファイルであればviで同時編集したりができます。
同期する/しないはコマンドでも切り替えられますが、
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
このスクリプトの引数に複数のログイン対象サーバを与えてやると
全サーバにログインしてすぐに同時オペレーションが行えます。
おまけ。他の人が作業してるターミナルをのぞく
休日の障害対応は各チームのメンバーがSkypeで連携しながらやっています。
その時に「〜〜の作業やります。サーバはXXX、セッション名はYYY」のような会話が出てくることがあります。
これが何をやってるかというと、、、
作業者が作業サーバでtmuxを起動して、
$ tmux new -s mikeda
確認者が指定されたセッションに対してattachしてやると
$ tmux attach -t mikeda -r
※追記:閲覧のみで充分なので、read-onlyオプションを追加しました(thx @hayajo)
複数人で同じターミナルを操作できます。
この機能を利用して、『作業者』の実際のオペレーションを『確認者』や他の作業者がリアルタムで確認することで、より精度の高い連携を取っています。
※追記(thx @tnmt)
上記の単純なattachでターミナルを共有できるのは、複数人が同じLinuxユーザを使える場合だけです。
個人アカウントなど、別ユーザ間でターミナルを共有する場合はwemuxを使うといいらしいです(まだ使ったことないw)。
新卒OJTにwemux(multi-user terminal multiplexing)を使って画面共有することにした
まとめ
というわけでtmuxでよく使ってる機能を簡単に紹介させてもらいました。
tmux、便利ですね。
最初は『ショートカット覚えるのだりぃ・・・』『コピペしづらい・・・』などグチグチ言ってたのですが、いつのまにか普段のオペレーションに欠かせないものになりました。
まだまだ知らないこと多そうなので、「この機能も便利だよ」ってのがあればぜひ教えて下さい!
※プログラミングの時はtmuxinatorが便利そうですね。また機会があれば紹介します。