如何在bash中创build一个等待Web服务器响应的循环?

如何在bash中创build一个等待Web服务器响应的循环?

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

更新,这个代码testing,如果我从服务器得到一个良好的响应。

如果curl --output / dev / null --silent --head --fail“$ url”; 然后
  回声“URL存在:$ url”
其他
  回声“URL不存在:$ url”
科幻

把这个问题和Chepner的答案结合起来,这对我有效:

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 

同时/直到等是个人的先决条件。

有趣的谜题。 如果您的客户端没有访问权限或asynchronousAPI,您可以尝试像这样刷新您的tcp套接字:

 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 

wait-on是一个跨平台的命令行实用程序和Node.js API,它将等待文件,端口,套接字和http(s)资源可用: https : //github.com/jeffbski/wait-on

例如,等待:8080 5秒,如果成功则执行NEXT_CMD。

 wait-on -t 5000 http-get://localhost:8080/foo && NEXT_CMD 

如果你需要检查服务器是否可用,原因是重新启动或其他的东西,你可以尝试做一个wget的服务器,并parsing响应或错误,如果你得到一个200甚至404服务器是,你可以使用–timeout = seconds来改变wget超时,你可以将超时设置为10秒,然后进行循环,直到响应的grep结果为止。

我不知道这是你正在寻找或真的你需要bash代码。