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

时间:2012-08-10 15:26:44

标签: 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

8 个答案:

答案 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代码。