Я изо всех сил пытаюсь создать сценарий 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=\
завиток в петлю.