#!/bin/
bash
if [ $# -le
1 ];
then
echo -e
"usage : \n\t$0 hostList REMOTE_CMD"
echo -e
"example: \n\t$0 hostList \"docker images | grep hive\""
exit 1
fi
# concurrent number by default.
CON_NUM=
9
host_list=
"$1"
shift
remote_cmd=
"$@"
if [ ! -f $host_list ];
then
echo "$host_list is not exist!"
exit 2
fi
function your_cmd() {
host=$
1
#echo -e
"---- cmd() start to : $host --"
CMD=
"env TERM=xterm ssh $host \"$remote_cmd\" 2>/dev/null"
eval ${CMD}
ret=$?
if [ $ret -ne
0 ];
then
echo -e
"\t$host: cmd return retry $ret"
fi
}
function concurrent()
{
# ff_file which is opened by fd
4 will be really removed after script stopped
mkfifo ./fifo.$$ && exec
4<> ./fifo.$$ &&
rm -f ./
fifo.$$
# initial fifo: write $con_num line to $ff_file
for ((i=
1; i<=$CON_NUM; i++));
do
echo "init:$i" >&
4 # init fifo
done
for host
in $(
cat $host_list |
grep -v
"^#");
do
read -u
4 # read from fifo to REPLY
{
#echo -e
"\n-- current loop for: \"$host\" [ fifo id: \"$REPLY\" ]"
your_cmd "$host"
echo -e
"---- done: $host ----\n"
echo "real:$host" 1>&
4 #
write to $fifo
} & # & to backgroud each process
in {}
done
wait #
wait all con-current cmd
in { } been running over
}
转载于:https://www.cnblogs.com/tengfei520/p/7843862.html
相关资源:Go-s5cmd并行S3和本地文件系统执行工具