用于检查远程 Web 服务器健康状态的 Bash 脚本

用于检查远程 Web 服务器健康状态的 Bash 脚本

我有几个带有基于网络的界面的设备,我需要定期检查它们的状态。

当服务器返回 1xx(继续)、2xx(成功)或 3xx(重定向)http 状态代码时,即认为服务器正常运行。当服务器返回 4xx(客户端错误)或 5xx(服务器错误)代码或在给定时间内未响应时,即认为服务器已死。

至于获取状态代码-我已经涵盖了这一点:

curl -I http://server.domain

如何可靠地检测超时(假设我认为 5 秒太多了,但这已经足够了,因为这发生在流量很少甚至没有流量的 LAN 中)并在给定时间过去而没有响应时终止 curl 进程?或者更好的是 - 如何将它们连接起来,让一个脚本在服务器正常运行时返回 TRUE,在服务器返回错误或超时时返回 FALSE?

答案1

我同意Sven的观点,这是一个已经有现成解决方案的问题。

也就是说,您可以使用返回的退出代码curl来确定是否发生超时。

如果 curl 超时或者服务器返回 4xx 或 5xx 状态代码,则以下脚本返回 FALSE:

HEADERS=`curl -Is --connect-timeout ${1-5} http://server.domain/`
CURLSTATUS=$?

# Check for timeout
if [ $CURLSTATUS -eq 28 ]
    then
        echo FALSE
else
    # Check HTTP status code
    HTTPSTATUS=`echo $HEADERS | grep HTTP | cut -d' ' -f2`
    if [ $HTTPSTATUS -le 399 ]
        then
            echo TRUE
    else
        echo FALSE
    fi
fi

此脚本接受超时参数,但默认为 5 秒。我针对一个实时 URL 进行了测试,连接超时分别为 5 秒和 0.01 秒,以演示:

# sh check_website.sh 5
TRUE
# sh check_website.sh .01
FALSE

相关内容