読者です 読者をやめる 読者になる 読者になる

ハマった時は # init 0

試したことを書き綴ってます

pdshコマンドで複数サーバに対してコマンド並列実行

pdshコマンドを使うと複数のサーバに対して、同じコマンドを並列で実行可能です。 分散システムの構築などで、複数のサーバを操作する際に非常に便利。

並列ってところが最高ですね。

事前準備
  • 環境変数 PDSH_RCMD_TYPE でサーバへ接続する際に使用するコマンドを指定
    • ssh接続する場合は、"ssh"
  • 環境変数 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