检查网站是否处于在线状态使用JSON响应

时间:2018-10-15 09:20:14

标签: bash shell

我要检查我的网站在线还是没有使用BASH脚本。 目前,我正在尝试检查是否卷曲响应错误,然后重新启动APACHE,但由于我使用的是云弹,所以它不起作用。我不是BASH脚本开发人员。我需要帮助,以便可以从我的网址检查JSON的响应是否为真,然后可以,否则请重新启动Apache。

URL="http://apental-calc.com/online.php"

for i in {1..5};do

 curl $URL >/dev/null 2>&1

 if [[ $? -ne 0 ]];then
    echo "Restarting Apache2"
    service apache2 restart
    sleep 5
    continue

 else
    echo "Working"
    exit 0
 fi

完成

1 个答案:

答案 0 :(得分:1)

我猜您要恢复的是一个HTTP代码,表明请求已成功,在这种情况下,您可以尝试以下操作:

HTTP_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" $URL)

这将打印已完成请求的HTTP状态,例如:

HTTP_RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" http://www.google.com)
echo $HTTP_RESPONSE
301

200和30X代码表示服务器正在工作。如果没有得到结果,那么该是检查CURL退出代码的时候了:

if [ $? -eq 7 ] then ...

从7开始,当CURL无法连接到主机时返回的代码:

  1. 无法连接到主机。 curl设法获得了计算机的IP地址,并尝试建立与主机的TCP连接,但失败了。这可能是因为您指定了错误的端口号,输入了错误的主机名,错误的协议,或者可能是因为之间存在防火墙或其他网络设备阻止了流量的通过

查看所有代码: https://ec.haxx.se/usingcurl-returns.html

UPDATE :如评论中所讨论,是否在HTTP状态代码或JSON有效负载(缺少)中进行检查尚不清楚。如果要检查有效负载,可以使用:

URL提供虚拟JSON: https://jsonplaceholder.typicode.com/todos/2

{
  "userId": 1,
  "id": 2,
  "title": "quis ut nam facilis et officia qui",
  "completed": false
}

可以对此进行解析(假设我们要检查“标题”):

$ curl  -s https://jsonplaceholder.typicode.com/todos/2 | grep -Po '"title": ".*' | cut -f 4 -d '"'

这仅匹配指定的模式并提取值。