美文网首页
Shell 多线程

Shell 多线程

作者: 霸体 | 来源:发表于2019-05-24 11:25 被阅读0次

#! /bin/bash

#############################
# 批量查询日志工具
# create: 2015-12-24
# author: zhouxiliang
#############################

help(){
cat << EOF
使用方法:  sh $0 -f hosts -e "script" -c 10
hosts   : ip文件
script  :每台服务器要执行的命令
-c 10   : 代表使用10个线程并发执行
EOF
exit 0
}

if [ $# -lt 6 ] ; then 
help
fi

#echo "$1 $2 $3 $4"

# 1. 获取要执行的机器 和 指令
HOSTS_FILE="";
SCRIPT="";
THREADS=10;
while getopts "e:f:c:" OPT;do   
    case $OPT in 
        f)
        HOSTS_FILE="$OPTARG"
        ;;     
        e)   
        SCRIPT="$OPTARG"
        ;;
        c)   
        THREADS=$OPTARG
        ;;     
        *)
          help
          exit;                
          ;;   
    esac   
done 


# 创建管道
tmp_file="/tmp/$$.fifo"
mkfifo $tmp_file
exec 6<>$tmp_file
rm $tmp_file

# 向管道输入线程
for ((i=0;i<$THREADS;++i)) ; do
echo
done >& 6

#读取要执行的机器ips
while read host ; do
hostarr=$hostarr" "$host
done < $HOSTS_FILE
#echo $hostarr

#多线程执行任务
for host in $hostarr ; do
read -u6
{
echo ">>>> $host start executing..."
ssh $host  "$SCRIPT"  2> /dev/null
echo >& 6
} &
done 

#等待后台线程结束
wait
#删除管道
exec 6>$-

exit 0

相关文章

网友评论

      本文标题:Shell 多线程

      本文链接:https://www.haomeiwen.com/subject/tsqgzqtx.html