如何在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代码。