shell并发脚本
1 #!/bin/bash 2 3 #中控机远程并发操作多台服务器(要求已经配好了公私钥) 4 #writen by hushi at 2017.10.19 5 6 ip_list=/scripts/yujian.txt 7 8 bingfa() 9 { 10 thread=5 #并发线程数 11 tmp_fifo_file="/tmp/$$.info" #命名管道 12 trap "exec 1000>&-; exec 1000<&-; exit 0" 2 #匹配ctrl+C 13 mkfifo $tmp_fifo_file #创建管道 14 exec 1000<>$tmp_fifo_file #创建文件描述符1000,以读写方式操作管道 15 rm -rf $tmp_fifo_file #删除创建的管道 16 17 for ((i=0;i<${thread};i++)) 18 do 19 echo >&1000 20 done 21 22 for ip in `cat ${ip_list}|grep "cn-beijing"|awk '{print $1}'` 23 do 24 read -u1000 25 { 26 zu_id=`cat ${ip_list}|grep -w "$ip"|awk '{print $8}'` 27 ssh $ip "cd /data1/yujian/${zu_id}/log && cat l.log|grep "test" >/tmp/${zu_id}.txt && echo -e '----${ip}----${zu_id}----\e[32m成功\e[0m'" &>/dev/null 28 echo >&1000 29 }& 30 done 31 32 wait 33 exec 1000>&- 34 } 35 36 bingfa
本来是想写一个子脚本,然后bash 子脚本得到结果,但是这样的话,需要在中控机上将得到的结果传回来,然后又去远端将传过去的脚本和结果删除。
因为只有中控机到服务器是免密的,服务器到中控需要中控密码。、
scp 源 目的
scp 远端ip远端文件 本地 #需要远端密码
scp 本地 远端ip远端文件 #需要远端密码
ssh ip “ ” 引号内可以写多条命令,使用&&连接起来