Bash:- 批量机器执行的命令

【应用场景】

  有一批服务器需要执行命令,需根据机器数量来衡量选用方法;  

第一种方法:适合数量很少情况下,串行执行,耗时较长;

LIST=(
"192.168.1.1|/data/server1"
"192.168.1.2|data/server2"
)
for i in ${LIST[@]};do
    command "${LIST[0]}" "${LIST[0]}"
done

第二种方法:适合数量不多情况下,并行执行,耗行较短,但是容易挤坏机器; 

LIST=(
"192.168.1.1|/data/server1"
"192.168.1.2|data/server2"
...
)
for i in ${LIST[@]};do
    (command "${LIST[0]}" "${LIST[0]}") &
done
wait

第三种方法:模拟并发,兼顾以上两者; 

LIST=(
"192.168.1.1|/data/server1"
"192.168.1.2|data/server2"
...
)
PARALLEL=10
tmpfile=$$.fifo
mkfifo ${tmpfile}
exec 4 <> ${tmpfile}
rm -f ${tmpfile}
{
    while [ ${PARALLEL} -gt 0 ];do
        echo
        let PARALLEL=${PARALLEL}-1
    done
} > &4

while read -u10 SEQ;do
    read < &4
    (command;echo >&4)&
done 10< <(for i in ${LIST[@]};do echo ${i};done)

 

posted @ 2017-11-13 09:41  ithandonglin  阅读(561)  评论(0编辑  收藏  举报