Назад | Перейти на главную страницу

цикл сценария bash до ответа веб-сервера 200

Я изо всех сил пытаюсь создать сценарий bash, который отслеживает веб-службу, и если он не работает, чтобы перезапустить службу в цикле while, пока он не вернется с ответом состояния 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; после перезапуска строки, но я хочу, чтобы сценарий проверял реальный статус ответа.

РЕДАКТИРОВАТЬ: Рабочая версия

#!/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

Не изобретайте велосипед. Многие инструменты уже делают это. Кроме того, вы проверяете состояние веб-сервера ровно один раз при запуске скрипта ( curl Команда не выполняется каждый раз, когда вы ссылаетесь на переменную $ HTTP, а только один раз, когда вы изначально определяете переменную. Вам нужно будет добавить HTTP=\завиток в петлю.