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
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