我必须以并行方式发送一些 cURL 请求。一方面,我有 curl.sh 脚本(出于安全原因,数据已被隐藏):
#!/bin/bash
SERVER=...
PORT=...
CONTEXTPATH=...
SERVICE=...
CERTIFICATETYPE=...
CERTIFICATE=...
KEYCERT=...
HEADER=...
CONTENT="Content-Type:text/xml;charset=UTF-8"
if [ "$1" != "" ] && [ "$2" != "" ]
then
echo "Executing curl script for $1 > $2"
curl -s -d @$1 --cert $CERTIFICATE:$KEYCERT --cert-type $CERTIFICATETYPE http://$SERVER:$PORT/$CONTEXTPATH/$SERVICE -H $HEADER -H $CONTENT > $2
else
echo "ERROR not valid arguments: curl.sh[ARG1=$1,ARG2=$2]"
fi
所以这个脚本,将被称为:
$ curl.sh requestData outputFile
然后,在另一个 parallel.sh 脚本中,我有:
#!/bin/bash
MODE=$1
REQUEST=
if [ "$MODE" != "" ]
then
if [ $MODE -eq 1 ]
then
REQUEST=requestFileOne.xml
fi
if [ $MODE -eq 2 ]
then
REQUEST=requestFileTwo.xml
fi
else
echo "ERROR no valid parameter"
echo "./parallel.sh 1|3"
echo " mode 1: send request 1x1"
echo " mode 3: send request 3x3"
fi
if [ "$REQUEST" != "" ]
then
echo "START CURL PARALLEL for $REQUEST"
time ./curl.sh $REQUEST ./out/out_1.xml & ./curl.sh $REQUEST ./out/out_2.xml &
./curl.sh $REQUEST ./out/out_3.xml & ./curl.sh $REQUEST ./out/out_4.xml &
./curl.sh $REQUEST ./out/out_5.xml & ./curl.sh $REQUEST ./out/out_6.xml
wait
fi
echo "END CURL PARALLEL"
如你所见,现在我做到了
$ ./parallel.sh 1
但是如果我想改变并行调用的数量,我必须编辑 parallel.sh 脚本文件,我想要类似的东西:
$ ./parallel.sh file number
其中 {file: 1|2} 是与 cURL 一起使用的数据文件,而 {number:X} 将是并行调用的数量。
首先,我想在循环中构建并行执行命令
for i in 1..$2
do
stringVar="$stringVar | ./curl.sh $REQUEST ./out/output_$i.xml"
done
for i in 1..$2
do
result=`./curl.sh $REQUEST ./out/output_$i.xml`
done
for i in 1..$2
do
./curl.sh $REQUEST ./out/output_$i.xml
done
但是,显然这些循环都没有按预期工作。在第一个循环中,我试图将 curls 命令保存为字符串,所以稍后我会将字符串作为命令运行。
任何想法?提前致谢。