pdshコマンドで複数サーバに対してコマンド並列実行
pdshコマンドを使うと複数のサーバに対して、同じコマンドを並列で実行可能です。 分散システムの構築などで、複数のサーバを操作する際に非常に便利。
並列ってところが最高ですね。
事前準備
- 環境変数 PDSH_RCMD_TYPE でサーバへ接続する際に使用するコマンドを指定
- 環境変数 PDSH_SSH_ARGS で ssh コマンドのオプションを指定
- .bashrc などで、上記の環境変数をexportしておく
- ssh公開鍵認証で、対象サーバに、パスワードなしでsshログインできるように準備しておく
export PDSH_RCMD_TYPE='ssh' export PDSH_SSH_ARGS='-oUserKnownHostsFile=/dev/null -oStrictHostKeyChecking=no -oLogLevel=ERROR -l%u %h'
複数のサーバに対して、コマンドを並列実行
- -wオプションでサーバ一覧を指定(正規表現が使える)
# pdsh -w 10.0.0.[3-5,7] 'service --status-all 2>/dev/null' 10.0.0.5: [ - ] bootlogd 10.0.0.7: [ - ] bootlogd 10.0.0.4: [ - ] bootlogd 10.0.0.3: [ - ] bootlogd 10.0.0.5: [ - ] grub-common 10.0.0.7: [ - ] grub-common 10.0.0.4: [ - ] grub-common 10.0.0.3: [ - ] grub-common 10.0.0.5: [ + ] ssh 10.0.0.7: [ + ] ssh 10.0.0.4: [ + ] ssh 10.0.0.3: [ + ] ssh 10.0.0.5: [ - ] stop-bootlogd 10.0.0.7: [ - ] stop-bootlogd 10.0.0.4: [ - ] stop-bootlogd 10.0.0.3: [ - ] stop-bootlogd 10.0.0.5: [ - ] stop-bootlogd-single 10.0.0.7: [ - ] stop-bootlogd-single 10.0.0.4: [ - ] stop-bootlogd-single 10.0.0.3: [ - ] stop-bootlogd-single 10.0.0.5: [ - ] urandom 10.0.0.4: [ - ] urandom 10.0.0.7: [ - ] urandom 10.0.0.3: [ - ] urandom
dshbakで整形
pdshの出力をパイプしてdshbakコマンドに流し込むと次のように、サーバごとに整形してくれます。
# pdsh -w 10.0.0.[3-5,7] 'service --status-all 2>/dev/null' | dshbak ---------------- 10.0.0.3 ---------------- [ - ] bootlogd [ - ] grub-common [ + ] ssh [ - ] stop-bootlogd [ - ] stop-bootlogd-single [ - ] urandom ---------------- 10.0.0.4 ---------------- [ - ] bootlogd [ - ] grub-common [ + ] ssh [ - ] stop-bootlogd [ - ] stop-bootlogd-single [ - ] urandom ---------------- 10.0.0.5 ---------------- [ - ] bootlogd [ - ] grub-common [ + ] ssh [ - ] stop-bootlogd [ - ] stop-bootlogd-single [ - ] urandom ---------------- 10.0.0.7 ---------------- [ - ] bootlogd [ - ] grub-common [ + ] ssh [ - ] stop-bootlogd [ - ] stop-bootlogd-single [ - ] urandom