|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
如果您觉得本篇CentOSLinux教程讲得好,请记得点击右边漂浮的分享程序,把好文章分享给你的小伙伴们!分享一个在Linux下摹拟多线程的并发剧本,利用这个剧本能够同时批量在界说数目的办事器上实行相干下令,比起一般for/while轮回只能按次一条一条实行的效力高十分多,在办理多量办事器时十分的有用。
以下剧本功效是经由过程scp(也可选rsync)向上千台办事器传更新包,剧本运转后同时在背景有50个scp历程向办事器传包。
#!/bin/bash
ip=`catiplist.txt|grep-v"#"|awk{print$1}`#过滤办事器IP
dir=/usr/local/src#方针路径
thead_num=50#自界说并发数,依据本身办事器功能或使用调剂巨细,入手下手万万别界说太年夜,制止办理机宕机
tmp_fifo_file="/tmp/$$.fifo"#以历程ID号定名管道文件
mkfifo$tmp_fifo_file#创立一时管道文件
exec4$tmp_fifo_file#以读写体例翻开tmp_fifo_file管道文件,文件形貌符为4,也能够取3-9恣意形貌符
rm-f$tmp_fifo_file#删除一时管道文件,也可不删除
for((i=0;i<$thead_num;i++))#使用for轮回向管道中输出并发数目的空行
do
echo""#输入空行
done>&4#输入重导向到界说的文件形貌符4上
foriin$ip#轮回一切要实行的办事器
do
read-u4#从管道中读取行,每次一行,一切行读取终了后实行挂起,直到管道有余暇的行
{
scp-P1000$1$i:$dir#一切要批量实行的下令都放在年夜括号内,scp是一个复杂实例,可交换恣意其他下令及下令组,1000为办事器真个端口
sleep3#停息3秒,给体系缓冲工夫,到达限定并发历程数目
echo"">&4#再写进一个空行,使挂起的轮回持续实行
}&#放进背景实行
done
wait#守候一切背景历程实行完成
exec4>&-#删除文件形貌符
exit0
--------------------------------低调的支解线------------------------------------
假如办理机与其他办事器没有创建ssh信托,也可将expect主动应对下令增加到并发剧本的轮回体傍边,修正以下:
#!/bin/bash
ip=`catiplist.txt|grep-v"#"|awk{print$1}`
dir=/usr/local/src
answer="yes"#界说yes/no应对变量
passwd="123456"#办事器暗码
thead_num=50
tmp_fifo_file="/tmp/$$.fifo"
mkfifo$tmp_fifo_file
exec4$tmp_fifo_file
rm-f$tmp_fifo_file
for((i=0;i<$thead_num;i++))
do
echo""
done>&4
foriin$ip
do
read-u4
{
expect<<EOF
settimeout-1
spawnscp-P1000$1$i:$dir
expect"(yes/no)?"{
send"$answer"
expect"Password:"
send"$passwd"
}"Password:"{send"$passwd"}"*host"{exit1}
expecteof
EOF
sleep3
echo"">&4
}&
done
wait
exec4>&-
exit0
欢迎大家来到仓酷云论坛! |
|