Как сделать скрипт, который выполняет команду, когда два параметра похожи на 5 минут? - PullRequest
0 голосов
/ 14 июня 2019

Я использую cURL для получения некоторых данных с веб-сайта, так как же выполнить команду, если два параметра с этого веб-сайта одинаковы в течение 5 минут?

#!/bin/bash

TIME= "300s"

abc=`$CURL ***
abcd=`$CURL *** 

echo $abc
echo $abcd 

if [ [ [ "$abc" -eq "eee" || "$abc" -eq "rrr" ] || [ "$abcd" -eq "eee" || "$abcd" -eq "rrr" ] ] -ge [ "$TIME" ] ] 
then
  echo "Critical hosts: "$abc
  echo "Critical service: "$abcd
fi

Итак, если $abc и $abcd равны == "eee" или == "rrr" в течение 5 минут, выполните команду.

1 Ответ

0 голосов
/ 14 июня 2019

Ниже скелета к вашему сценарию. Вам придется реализовать my_curl_function самостоятельно, но я предлагаю один раз вызвать функцию curl и проанализировать данные как для SERVER, так и SERVICE. Вызов его один раз для каждой переменной приводит к большим накладным расходам, что приводит к тому, что цикл не будет ровно 5 минут (чего еще нет). Если вы действительно хотите, чтобы это было ровно 5 минут, используйте Python; -)

Сценарий проверяет каждую секунду, изменяется ли содержимое SERVER или SERVICE. Если один из них отличается от ожидаемого, цикл будет прерван, и сценарий отобразит "Data is changed". Это будет эхо "Data remains unchanged" в противном случае.

#! /bin/bash

function my_curl_function {
    echo "Implement me!"
}

MYTIME=300

SERVER_EXPECTED=$(my_curl_function)
SERVICE_EXPECTED=$(my_curl_function)
SERVER=""
SERVICE=""

CHANGED=0

for ((x=0; x<MYTIME;x++)); do

    SERVER=$(my_curl_function)
    SERVICE=$(my_curl_function)

    if [ "${SERVER_EXPECTED}" != "${SERVER}" ] || [ "${SERVICE_EXPECTED}" != "${SERVICE}" ]; then
        CHANGED=1
        break
    fi
    echo -ne "\rSeconds waiting: $x"
    sleep 1
done
echo

if [ ${CHANGED} -eq 1 ]; then
    echo "Data is changed"
    exit 0
else
    echo "Data remains unchanged"
    exit 1
fi
...