bash 脚本循环直到网络服务器响应 200

bash 脚本循环直到网络服务器响应 200

我正在努力创建一个 bash 脚本来监视 Web 服务,如果发生故障,则在 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

答案1

不要重新发明轮子。很多工具已经这样做了。此外,您在脚本启动时只检查一次 Web 服务器的状态(该curl命令不会在您每次引用 $HTTP 变量时执行,而只会在您最初定义变量时执行一次。您需要将HTTP=\curl` 行添加到循环中。

答案2

即使在编辑中,您也会检查最外层循环中的条件。一旦满足该条件,循环就会退出。

你的描述听起来像是你想做的

while true
do
  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
  sleep 5
done

最外层while true是一个无限循环,只有当你终止(检查)进程时才会退出

相关内容