Shell 多线程


#! /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

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容