如何在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
答案 0 :(得分:126)
将问题与chepner的答案结合起来,这对我有用:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
答案 1 :(得分:21)
我想限制最大尝试次数。根据托马斯接受的答案,我做了这个:
attempt_counter=0
max_attempts=5
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
if [ ${attempt_counter} -eq ${max_attempts} ];then
echo "Max attempts reached"
exit 1
fi
printf '.'
attempt_counter=$(($attempt_counter+1))
sleep 5
done
答案 2 :(得分:10)
httping对此很好。简单,干净,安静。
while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done
while / until etc是个人的首选。
答案 3 :(得分:1)
使用反引号` `
是outdated。请改用$( )
:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
答案 4 :(得分:1)
printf "Waiting for $HOST:$PORT"
until nc -z $HOST $PORT 2>/dev/null; do
printf '.'
sleep 10
done
echo "up!"
我从这里得到了这个想法:https://stackoverflow.com/a/34358304/1121497
答案 5 :(得分:0)
有趣的谜题。如果您的客户端没有访问权限或异步api,您可以尝试使用这样的tcp套接字:
until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
printf '.'
sleep 1
done
但这是一个忙碌的等待,间隔为1秒。你可能想要更多的分辨率。这也是全球性的。如果与该服务器建立了另一个连接,则结果无效。
答案 6 :(得分:0)
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
答案 7 :(得分:-1)
如果您需要检查服务器是否可用,原因是重新启动还是其他原因,您可以尝试对服务器进行wget并解析响应或错误,如果您获得200或甚至404服务器是up,你可以用--timeout = seconds更改wget超时,你可以将超时设置为10秒并进行循环,直到响应的grep有结果。
我不知道这是你正在搜索的内容还是你真的需要bash代码。