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
网友评论