如何评估来自bash / shell脚本的http响应代码?
我有这种感觉,我错过了明显的,但没有成功与man [curl|wget]
或谷歌(“http”使这样一个不好的搜索术语)。 我正在寻找经常失败的web服务器之一的快速修复错误,并返回错误消息的状态码500。 一旦发生这种情况,它需要重新启动。
由于根本原因似乎很难找到,我们正在寻求一个快速解决方案,希望它能够弥补时间,直到我们能够真正解决它(该服务不需要高可用性)
建议的解决方案是创建一个每5分钟运行一次的cron作业,检查http:// localhost:8080 /。 如果返回状态码为500,则网络服务器将重新启动。 服务器将在一分钟内重新启动,因此无需检查已在运行的重新启动。
有问题的服务器是一个Ubuntu 8.04最小安装,仅安装了足够的软件包即可运行目前所需的软件包。 没有必要在bash中完成任务,但我希望它能在这样一个最小的环境中运行,而不需要安装更多的解释器。
(我对脚本非常熟悉,将http状态代码分配给环境变量的命令/选项就足够了 - 这正是我寻找和找不到的。)
我没有在500代码上测试过这个,但它在200,302和404等其他代码上工作。
response=$(curl --write-out %{http_code} --silent --output /dev/null servername)
curl --write-out "%{http_code}n" --silent --output /dev/null "$URL"
作品。 如果没有,你必须打回来查看代码本身。
这里:
url='http://localhost:8080/'
status=$(r=(IFS=' ';$(curl -Is --connect-timeout 5 "${url}" || echo 1 500));echo ${r[1]})
[ status -eq 500 ] && bounce # assuming the bounce script is called 'bounce'
或者把它全部放在一行上:
[ 500 -eq $(r=(IFS=' ';$(curl -Is --connect-timeout 5 'http://localhost:8080/' || echo 1 500));echo ${r[1]}) ] && bounce
为了解释,HTTP响应总是包含作为响应第一行的一部分的服务器状态,如:
HTTP/1.1 200 OK
HTTP/1.0 404 NOT FOUND
该脚本仅使用curl对localhost:8080执行HEAD请求。 它将HTTP头转换为数组并返回第二个元素。 为了简化某些失败处理,如果HEAD在5秒内未能连接或由于某种原因失败,500也会返回。
链接地址: http://www.djcxy.com/p/45605.html上一篇: How to evaluate http response codes from bash/shell script?