こんにちは.はまじです.

本日はTIPSという感じの記事を投稿します.

前半だらだらと余計なこと書いてますので,解法だけ見たい方は記事の一番最後ご覧ください.


byobuについて(導入編)


最近サーバ管理でログを確認するために,複数台のサーバに個別でログインしてlessコマンドやgrepコマンド叩いてるわけなんですが,10台超えてくるとさすがに面倒になってきました.

最低でも,複数のサーバの状態をひとつの画面で見たいと思ったので,byobu を導入いたしました.


byobu

こちらは公式ホームページです.


ターミナルにscreenではなくbyobuを使うべき100の理由

ちょっとアレな解説ですが,基本的な使用方法を抑えている簡単なマニュアルです


業務中,複数のサーバに対してアプリのデプロイをすることになったので,デプロイ先のサーバにログインして,ログをtail -fで表示し,確認作業を行う必要がありました.

ただ,それが1台のサーバだけではなく,複数同時にデプロイすることになったので,デプロイ先の数だけターミナルを立ち上げてそれぞれサーバにログインして・・・という面倒な作業をおこなっておりました.

さらに,10個ぐらい同時にターミナルウィンドウが立ち上がってるせいで,Alt+TABでウィンドウ間を移動するのが困難であり,いちいちマウスを使ってウィンドウを選択しなければなりません.  


byobuでは,1つのウィンドウを複数に分割でき,ウィンドウ間をキーボード操作で簡単に移動することができます.
Alt+TABではどこに飛ぶかもわからない状態でしたが,byobuを使うことで上記のウィンドウ選択にマウスを使う煩わしさから解放され,思った場所へすぐに移動することができるようになりました.


byobuですべての分割ウィンドウにコマンドを送る方法


で,確かに便利にはなったのですが,どうせならサーバに一括でコマンド送信したいですよねー!という想いがでてきました.

各サーバで実行する(ログ確認用の)コマンドは全く同じなので,複数のウィンドウに対して一括でコマンドを送信したいわけです.

ということで,色々調べておりました.


byobuはscreenをより使いやすくしたという位置づけですが,スタンドアロンではなくバックエンドにscreen/tmuxが動いておりp,そのフロントにbyobuが動いている,という感じです(合ってる?).

なので,byobuのバックエンドがtmuxであれば,tmux専用のオプションもbyobuで使用することができます.


ということで,byobuで以下のコマンドが使用出来ます.


byobu set-window-option synchronize-panes on

こうすることで,1つのシェルのなかで分割されたすべてのウィンドウに同じコマンドを送ることができます.


「やったーこれでログ管理楽になるぞー」と思いきや,面倒な事態に.

サーバにログインした後ではbyobuのset-window-optionを実行できないという問題が起きました.


まぁ考えたら当たり前なんですが,ローカルから各分割ウィンドウ(ログインサーバ)に対してコマンドを送る方式になっているので,サーバにログインする前にset-window-optionを実行する必要があります.


で,さきにset-window-optionを実行しちゃうと,ここで弊害が.


ssh -l hamaji-dev myserver01

例えば,サーバが10台あって,それぞれmyserver01~myserver10までホスト名が割り振られていたとすると,set-window-optionを先に実行すると,すべての分割ウィンドウで上記コマンドが実行され,同じサーバにログインしてしまうという問題があります.


byobuで複数ウィンドウから別々のサーバにログインする方法


前置きが超長くなったのですが,シンプルな解決策です.

各分割ウィンドウに対して,同じ変数を用いてログイン先をそれぞれ指定する方法です.


% login_to=myserver01
% # set login_to variables on each divided window


% byobu set-window-option synchronize-panes on
% ssh -l hamaji-dev ${login_to}


$ grep hogehoge /path/to/log

どうでしょうか?初回実行時は「気持ち悪www」と思いましたが,超便利です.

ちゃんと同じコマンドが送られるように,各ウィンドウの同期(目視)する必要はありますが,1回のコマンドでできるのは超便利です.

とは言うものの,各分割ウィンドウで変数設定しないといけないのが若干面倒ですね・・・.