1

いくつかの 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 コマンドを文字列として保存しようとしていたので、後で文字列をコマンドとして実行します。

何か案が?前もって感謝します。

4

1 に答える 1