如何在等待网络服务器响应的bash中创建一个循环?
它应该打印一个“。” 每 10 秒左右,并等待服务器开始响应。
更新,此代码测试我是否从服务器获得了良好的响应。
if curl --output /dev/null --silent --head --fail "$url"; 然后 echo "URL 存在:$url" 别的 echo "网址不存在:$url" 菲
如何在等待网络服务器响应的bash中创建一个循环?
它应该打印一个“。” 每 10 秒左右,并等待服务器开始响应。
更新,此代码测试我是否从服务器获得了良好的响应。
if curl --output /dev/null --silent --head --fail "$url"; 然后 echo "URL 存在:$url" 别的 echo "网址不存在:$url" 菲
将问题与chepner的回答结合起来,这对我有用:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
我想限制最大尝试次数。根据托马斯接受的答案,我做了这个:
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
httping 很适合这个。简单、干净、安静。
while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done
而/直到等是个人偏好。
` `
已经过时。改用$( )
:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
您还可以像这样组合 timeout 和 tcp 命令。它将在 60 秒后超时,而不是无限期等待
timeout 60 bash -c 'until echo > /dev/tcp/myhost/myport; do sleep 5; done'
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
有趣的谜题。如果您的客户端没有访问权限或异步 api,您可以尝试像这样 grepping 您的 tcp 套接字:
until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
printf '.'
sleep 1
done
但这是一个间隔为 1 秒的繁忙等待。您可能需要更多的分辨率。这也是全球性的。如果与该服务器建立了另一个连接,则您的结果无效。