3つの異なるコンピュータでパフォーマンステストをトリガーするためにループで実行される次のシェルスクリプトがあります。 3台のコンピュータで検証した後、同時にテストを実行したいと思います。同時に、3台のコンピュータにカールコマンドを送信するのと同じです。
#!/bin/sh
IP_Addresses=(192.168.2.33,192.168.2.34,192.168.2.35)
triggerPerformanceTest(){
for iplist in $(echo $IP_Addresses | sed "s/,/ /g")
do
echo "Validating the health end point in the remote server"
HTTP_RESPONSE=$(curl -m 1800 --silent --write-out "HTTPSTATUS:%{http_code}" -X GET http://${iplist}:9096/health)
HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
HTTP_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g')
if [ $HTTP_STATUS -eq 200 ] && [ $HTTP_BODY = "OK" ]; then
echo "Success!! it seems the health service is ruuning in the target machine"
echo "Starting the Jmeter Test"
else
echo "The health end point of the nodejs service return exit code 1, let the service start on the remote host"
sleep 20
HTTP_RESPONSE_NEW=$(curl -m 1800 --silent --write-out "HTTPSTATUS:%{http_code}" -X GET http://${iplist}:9096/health)
HTTP_STATUS_NEW=$(echo $HTTP_RESPONSE_NEW | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
HTTP_BODY_NEW=$(echo $HTTP_RESPONSE_NEW | sed -e 's/HTTPSTATUS\:.*//g')
count=2
echo "Re-validating the health end point in the remote server"
while [ $HTTP_STATUS_NEW -ne 200 ] && [ $HTTP_BODY_NEW != "OK" ]
do
echo "Waiting for the Node-js service to start on the remote server"
sleep 5
HTTP_RESPONSE_FINAL=$(curl -m 1800 --silent --write-out "HTTPSTATUS:%{http_code}" -X GET http://${iplist}:9096/health)
HTTP_STATUS_FINAL=$(echo $HTTP_RESPONSE_NEW | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
HTTP_BODY_FINAL=$(echo $HTTP_RESPONSE_NEW | sed -e 's/HTTPSTATUS\:.*//g')
count=`expr $count + 1`
if [ $count -eq 0 ]
then
break
else
continue
fi
done
echo "Starting the Jmeter Test"
fi
done
}
triggerPerformanceTest $IP_Addresses
だから私の計画は、これらの3つのカールコマンドを配列要素に入れて呼び出すことです。しかし、今は順番に呼び出されます。 3台のコンピュータで並列にトリガする方法はありますか?次のコマンドを一度に呼び出すのと同じです。
curl http://192.168.2.33:9096/triggerPerformanceTest
curl http://192.168.2.34:9096/triggerPerformanceTest
curl http://192.168.2.35:9096/triggerPerformanceTest
それともこの問題を解決するより良い方法はありますか?私が考えることができるのは、待ち時間テストをトリガするロジックをターゲットコンピュータに実装することです。つまり、最初のコンピュータは数ミリ秒のテスト待ち時間を持ち、2番目のコンピュータは1番目と3番目のコンピュータよりも短い待ち時間を持ちます(0)。 。
ベストアンサー1
この試み、
#!/bin/bash
IP_Addresses=(192.168.2.33 192.168.2.34 192.168.2.35)
triggerPerformanceTest(){
iplist=$1
LOG=/tmp/$iplist.log
echo "Validating the health end point in the remote server" >> $LOG
HTTP_RESPONSE=$(curl -m 1800 --silent --write-out "HTTPSTATUS:%{http_code}" -X GET http://${iplist}:9096/health)
HTTP_STATUS=$(echo $HTTP_RESPONSE | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
HTTP_BODY=$(echo $HTTP_RESPONSE | sed -e 's/HTTPSTATUS\:.*//g')
if [ $HTTP_STATUS -eq 200 ] && [ $HTTP_BODY = "OK" ]; then
echo "Success!! it seems the health service is ruuning in the target machine" >> $LOG
echo "Starting the Jmeter Test" >> $LOG
else
echo "The health end point of the nodejs service return exit code 1, let the service start on the remote host" >> $LOG
sleep 20
HTTP_RESPONSE_NEW=$(curl -m 1800 --silent --write-out "HTTPSTATUS:%{http_code}" -X GET http://${iplist}:9096/health)
HTTP_STATUS_NEW=$(echo $HTTP_RESPONSE_NEW | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
HTTP_BODY_NEW=$(echo $HTTP_RESPONSE_NEW | sed -e 's/HTTPSTATUS\:.*//g')
count=2
echo "Re-validating the health end point in the remote server" >> $LOG
while [ $HTTP_STATUS_NEW -ne 200 ] && [ $HTTP_BODY_NEW != "OK" ]
do
echo "Waiting for the Node-js service to start on the remote server" >> $LOG
sleep 5
HTTP_RESPONSE_FINAL=$(curl -m 1800 --silent --write-out "HTTPSTATUS:%{http_code}" -X GET http://${iplist}:9096/health)
HTTP_STATUS_FINAL=$(echo $HTTP_RESPONSE_NEW | tr -d '\n' | sed -e 's/.*HTTPSTATUS://')
HTTP_BODY_FINAL=$(echo $HTTP_RESPONSE_NEW | sed -e 's/HTTPSTATUS\:.*//g')
$HTTP_STATUS_NEW=$((HTTP_STATUS_FINAL))
$HTTP_BODY_NEW=$((HTTP_BODY_FINAL))
count=`expr $count + 1`
if [ $count -eq 0 ]
then
break
else
continue
fi
done
echo "Starting the Jmeter Test" >> $LOG
fi
}
for ip in ${IP_Addresses[@]}
do
triggerPerformanceTest "$ip" &
done
期待通りに動作するか教えてください。
echo
メッセージは次の場所にあります。/tmp/$iplist.log
(編集中…OPの回答を待っています)