ハマった時は # 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

bashrcとvimrc

いつも忘れて調べるので、自分用メモ・・・

bashrc

export PS_FORMAT="pid,tty,user,stat,time,args"
export PS1="\[\033[01;32m\]\u@\h\[\033[00m\]:\[\033[01;34m\]\W\[\033[00m\] [\t]\$ "

#SOCKDIR=`/bin/ls -ld /tmp/ssh-*  | grep $USER | awk '{ print $9 }'`
#SSH_AUTH_SOCK=`/bin/ls ${SOCKDIR}/agent*`
#SSH_AGENT_PID=`/bin/ps x -U $USER -u $USER | grep ssh-agent | grep -v "grep" | awk '{ print $1 }'`
#export SSH_AUTH_SOCK;
#export SSH_AGENT_PID;

ulimit -S -c unlimited

vimrc

colorschem evening
set number
set tabstop=4
set shiftwidth=4
set softtabstop=4
set expandtab
set laststatus=2
set statusline=%<%f\ %m%r%h%w%{'['.(&fenc!=''?&fenc:&enc).']['.&ff.']'}%=%l,%c%V%8P
set fileencodings=utf-8,iso-2022-jp,euc-jp
set backupdir=~/tmp/vimbackup
set tags+=tags;
set tags+=./**/tags
set fo=oql
":e ++enc=iso-2022-jp
""set fo-=ro
"set formatoptions=cql
""set autoindent
"
""" binary mode
augroup Binary
        au!
        au BufReadPre  *.bin let &bin=1
        au BufReadPost *.bin if &bin | %!xxd
        au BufReadPost *.bin set ft=xxd | endif
        au BufWritePre *.bin if &bin | %!xxd -r
        au BufWritePre *.bin endif
        au BufWritePost *.bin if &bin | %!xxd
        au BufWritePost *.bin set nomod | endif
augroup END