仮想化大好きな皆さん( ノ゚Д゚)こんばんわ。…なんだこの顔文字。2ch辞書入れてる所為か、恐いな(;´Д`)
さて、家やAWSにサーバをお持ちの仮想化大好きの皆様は、もう100も 200もサーバを管理されていることと認知しています。したがって、マルチサイトを管理するための専用のツールなどを入れて、効率的に管理しているだろうと予想します。流石です。それにつけても、仮想化初心者の私の自宅サーバでは、マシンスペックも非力ですし、そんなにたくさんを管理することなど不可能です。ましてやお金がないのに、専用の管理ツールなんて…。
そのため、ごにょごにょして、ssh で rootでは non password で、DSAの鍵認証をさせて、あるサーバから、全てのサーバへログインできるようにして、複数のサイトへコマンドを実行できるように、なんてことをしています。例えばこんなワンライナーで。
1 | $ for server in host01 host02 host03 ; do ssh $server "command01;command02" ; done |
ただ、これではシングルタスクで順次実行ですし、”sudo” 使えないので、sudo したければ shell を組まねばなりません。
そこで登場したるは”GNU Parallel“コマンドです。複数ジョブを一気に実行できますし、コマンド化されているので sudoかけることもできます。先ほどの例を展開すると。
1 | $ sudo parallel -j 3 ssh {} "command01;command02" ::: host01 host02 host03 |
簡単ですね。ホスト名の一覧の入ったファイルを指定して
1 | $ cat hostlist | sudo parallel -j 3 ssh {} "command01;command02" |
こんなことをすることもできます。便利ですねヽ(´ー`)ノ [I]なお、”-j 3″はジョブを3つ並行起動する。です。大きくすれば同時実行数が増えます。CPU使用率での表現も可能です。”-j … Continue reading
しかし、実行してみるとわかるのですが、command02は parallel コマンド経由だと、ローカルホストで実行されてしまうんですね…。
“[GNU] parallel+ssh で複数のリモートホストに複数のコマンドを実行させる” の続きを読む
References
↑I | なお、”-j 3″はジョブを3つ並行起動する。です。大きくすれば同時実行数が増えます。CPU使用率での表現も可能です。”-j 300%”みたいに。多分 |
---|