UNIX基于脚本参数执行并行卷曲

时间:2013-06-11 09:58:56

标签: unix curl parallel-processing arguments

我必须以并行方式发送一些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命令保存为String,所以稍后我将运行String as command。

有什么想法吗? 提前谢谢。

1 个答案:

答案 0 :(得分:0)

你能使用GNU Parallel:

seq 100 | parallel -j0 curl.sh file.xml output{}.xml

观看GNU Parallel的简介视频,了解详情:https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1

10秒安装:

wget -O - pi.dk/3 | bash