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