bash цикл циклу до відповіді веб-сервера 200


0

Я намагаюся створити скрипт bash, який слідкує за веб-службою, і якщо не вдається перезапустити службу через певний час, поки вона не повернеться до відповіді 200.

Приклад:

#!/bin/bash
HTTPD=`curl -A "Web Check" -sL --connect-timeout 3 -w "%{http_code}\n" "http://127.0.0.1" -o /dev/null`
until [ "$HTTPD" == "200" ]; do
    printf '.'
    sleep 5
    service nginx restart
done

or

while [ "$HTTPD" != "200" ];
do
   service nginx restart
   sleep 5
   if [ "$HTTPD" == "200" ];then
        break;
   else
        service nginx restart
   fi
done

Обидва вони працюють як 80%, проблема полягає в тому, що цикл не повторно перевірятиме стан відповіді $ HTTPD і не порушує цикл.

Я міг би додати HTTPD = 200; після рядка перезапуску, але я хочу, щоб сценарій перевіряв реальність відповіді на стан.

EDIT: Робоча версія

#!/bin/bash

HTTPD=`curl -A "Web Check" -sL --connect-timeout 3 -w "%{http_code}\n" "http://127.0.0.1" -o /dev/null`
until [ "$HTTPD" == "200" ]; do
    printf '.'
    sleep 3
    service nginx restart
    HTTPD=`curl -A "Web Check" -sL --connect-timeout 3 -w "%{http_code}\n" "http://127.0.0.1" -o /dev/null`
done

Я не знаю, чому це питання неодноразово озвучується, але хочу сказати спасибі за надання редакції EDIT: Робоча версія - мені це допомогло. Я сподіваюся, що у вас прекрасний день. Дякую.
Грег Едвардс

Відповіді:


1

Не винаходити колесо. Дуже багато інструментів це роблять. Крім того, ви перевіряєте стан веб-сервера рівно один раз під час запуску сценарію ( curlкоманда не виконується щоразу, коли ви посилаєтесь на змінну $ HTTP, але лише один раз, коли ви спочатку визначаєте змінну. Вам потрібно буде додати HTTP=\curl` лінії в петлю.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.