Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 使用JSON响应检查网站是否处于联机状态_Bash_Shell - Fatal编程技术网

Bash 使用JSON响应检查网站是否处于联机状态

Bash 使用JSON响应检查网站是否处于联机状态,bash,shell,Bash,Shell,我想检查我的网站是否在线,是否使用BASH脚本。 目前,我正在尝试检查curl响应是否出错,然后重新启动APACHE,但它不工作,因为我使用的是CloudFlare。我不是BASH脚本开发人员。我需要帮助来检查我的URL中的JSON响应,如果是真的,那么可以,否则重新启动Apache URL="http://apental-calc.com/online.php" for i in {1..5};do curl $URL >/dev/null 2>&1 if [[

我想检查我的网站是否在线,是否使用BASH脚本。 目前,我正在尝试检查curl响应是否出错,然后重新启动APACHE,但它不工作,因为我使用的是CloudFlare。我不是BASH脚本开发人员。我需要帮助来检查我的URL中的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

完成

我想您试图恢复的是一个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 ...
当CURL无法连接到主机时返回的代码为7:

无法连接到主机。curl设法获取到计算机的IP地址,并尝试设置到主机的TCP连接,但失败。这可能是因为您指定了错误的端口号、输入了错误的主机名、错误的协议,或者可能是因为中间有防火墙或其他网络设备阻止流量通过 请参阅所有代码:

更新:正如评论中所讨论的,关于检查是在HTTP状态代码中进行还是在缺少的JSON负载中进行,问题并不清楚。如果您想检查有效负载,可以使用:

为伪JSON提供服务的URL:

要分析这个问题,可以使用以下命令:让我们假设要检查标题:

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

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

检查精确程度?另外,请注意反模式-任何看起来像cmd的东西;如果[$?-ne 0]];然后通常应该像这样重写!cmd;然后-if的全部目的是运行命令并检查其退出状态。我不是bash开发人员,我不知道你想说什么。。我想检查ststaus是否正常,然后什么也不做,否则重新启动apachew,你想检查JSON的哪一部分,你如何知道它是否正常?Re:反模式,参见示例William Pursell在这里的回答:curl如何失败并不重要;如果失败,测试应该失败。但是这个标题讲了一些关于JSON的内容,您在这里根本没有检查任何JSON。我猜JSON是指响应及其字段,其中一个是HTTP状态代码。如果您想检查某种JSON负载,那么应该检查响应负载。在这种情况下,应该提供一个有效JSON的示例;OP应该澄清他们的问题。HTTP结果代码肯定不是任何JSON响应的一部分。添加了一个关于如何检查JSON负载的示例。好的,我得到了状态。帮我比较一下。意味着如果状态不正常。或空白或其他内容重新启动apache,否则退出
$ curl  -s https://jsonplaceholder.typicode.com/todos/2 | grep -Po '"title": ".*' | cut -f 4 -d '"'