如何在bash中创建等待web服务器响应的循环?

如何在bash中创建等待web服务器响应的循环?,bash,Bash,如何在bash中创建等待web服务器响应的循环 它应该每隔10秒左右打印一个“.”,并等待服务器开始响应 更新,这段代码测试我是否从服务器获得了良好的响应 if curl --output /dev/null --silent --head --fail "$url"; then echo "URL exists: $url" else echo "URL does not exist: $url" fi 如果curl--output/dev/null--silent--head--fa

如何在bash中创建等待web服务器响应的循环

它应该每隔10秒左右打印一个“.”,并等待服务器开始响应

更新,这段代码测试我是否从服务器获得了良好的响应

if curl --output /dev/null --silent --head --fail "$url"; then echo "URL exists: $url" else echo "URL does not exist: $url" fi 如果curl--output/dev/null--silent--head--fail“$url”;然后 echo“URL存在:$URL” 其他的 echo“URL不存在:$URL” fi
如果您需要检查服务器是否可用,原因是重新启动或其他情况,您可以尝试向服务器创建wget并解析响应或错误,如果服务器启动时得到200或404,您可以使用--timeout=seconds更改wget超时,您可以将timeout设置为10秒,并进行循环,直到响应上的grep有结果为止


我不知道这是你正在搜索的还是你真的需要bash代码。

有趣的谜题。如果您的客户端没有访问权限或异步api,您可以尝试如下方式对tcp套接字进行grepping:

until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
  printf '.'
  sleep 1
done

但这是一个繁忙的等待,间隔1秒。你可能需要更多的解决方案。这也是全球性的。如果与该服务器建立了另一个连接,则您的结果无效。

将该问题与切普纳的答案结合起来,这对我来说很有效:

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
    printf '.'
    sleep 5
done

反勾号
`
的使用非常简单。改用
$()

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
  printf '.'
  sleep 5
done

httping在这方面很好。简单,干净,安静

while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done

while/until etc是个人首选项。

我想限制尝试的最大次数。根据Thomas的公认答案,我提出了以下建议:

尝试\u计数器=0
最大尝试次数=5次
直到$(curl--output/dev/null--silent--head--failhttp://myhost:myport); 做
如果[${trunt_counter}-eq${max_trunts}];然后
回显“达到最大尝试次数”
出口1
fi
printf''
尝试计数=$($尝试计数+1))
睡眠5
完成

我从这里得到了这个想法:

你能更具体地告诉我你是如何等待服务器响应的吗?我会考虑服务器没有准备好,只要它不回复,或者它用不同于200响应的东西来回复。改为使用
$()
。这将是一个很好的扩展,允许在放弃之前有一个最长的等待时间。为什么需要
--head
?@lexicore因为这个命令对主体不感兴趣,所以我们只请求head(尽管您可以包含逻辑来检查有关服务器状态的更多信息)。省略
--head
不会改变任何东西,但是如果您想对响应内容(比如status.html)执行一些逻辑,您可以这样做。我有一个特定的例子,使用
--head
总是返回
405
。不得不把它取下来让它重新思考,永远是一段很长的时间…
对于我来说在
seq 60
;进行httping-qc1http://myhost:myport &&echo&中断睡眠5 echo-n${i}。。完成
如果由于某些原因请求的链接超时,我建议添加
--最长时间5
printf "Waiting for $HOST:$PORT"
until nc -z $HOST $PORT 2>/dev/null; do
    printf '.'
    sleep 10
done
echo "up!"