Цифры, которые вы используете, кажутся слишком большими для bash
. Вы можете попробовать что-то вроде:
#!/bin/bash
SIZE=$(redis-cli info | awk -F':' '$1=="used_memory" {print int($2/1000)}')
MAX=19000000
if [ "$SIZE" -gt "$MAX" ]; then
echo 123
fi
Попробуйте это,
#!/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
(Редактирование....жду ответа ОП)
Самое простое решение — убрать цикл из вашей функции и просто запустить функцию в фоновом режиме:
#!/bin/sh
triggerPerformanceTest(){
thisIp=$1
## the rest of your tests. Just use $thisIp the way you were using
## the $iplist variable.
}
IP_Addresses="192.168.2.33,192.168.2.34,192.168.2.35"
for ip in $IP_Addresses; do
triggerPerformanceTest "$ip" &
}
Это запустит тест на каждом IP-адресе, и, поскольку вы отправляете команду в фоновом режиме с &
, они будут запущены на почти в одно и то же время. Если вам не нужна миллисекундная точность, этого должно быть достаточно.
Хотя вы приняли ответ. Я думаю, вы также можете добиться этого, используя команду parallel
#!/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
}
cat IP_Addresses_file | parallel triggerPerformanceTest {}
Предположим, у вас есть файл с именем IP_Addresses_file
, содержащий все IP-адреса.