Webサーバーが応答するのを待っているループをbashで作成する方法は?


101

Webサーバーが応答するのを待っているループをbashで作成する方法は?

「。」を出力する必要があります。10秒ごとに、サーバーが応答を開始するまで待機します。

更新。このコードは、サーバーから適切な応答があるかどうかをテストします。

if curl --output / dev / null --silent --head --fail "$ url"; その後
  echo "URLが存在します:$ url"
そうしないと
  echo "URLが存在しません:$ url"
fi

サーバーが応答するのをどのように待っているかについて、具体的に説明できますか?
chepner

サーバーが応答しないか、200応答とは異なる何かで応答する限り、サーバーの準備ができていないと見なします。
ソリン2012

回答:


168

質問とチェプナーの答えを組み合わせると、これは私にとってうまくいきました:

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
    printf '.'
    sleep 5
done

10
バッククォートの使用 ``は時代遅れです。$( )代わりに使用してください。
Serge Stroobandt 14

6
あきらめる前に最大の待機時間を可能にする優れた拡張機能になるでしょう
tkruse

なぜあなたは必要--headですか?
lexicore 2017

3
@lexicoreこのコマンドでは本体は対象外なので、ヘッドのみを要求します(サーバーの状態についてより多くのものをチェックするロジックを含めることもできます)。除外して--headも何も変わりませんが、応答の内容(status.htmlなど)にロジックを実行したい場合は変更できます。
Thomas Ferris Nicolaisen 2017

1
私は--head常に使用される特定のケースを返しました405。機能させるために削除する必要があった
ロンハーレフ

38

最大試行回数を制限したかった。トーマスの受け入れられた答えに基づいて、私はこれを作りました:

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

--max-time 5何らかの理由でリクエストされたリンクがタイムアウトになった場合は追加することをお勧めします
Enigo

16

これにはhttpingが適しています。シンプル、クリーン、静か。

while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done

while / until etcは個人的な好みです。


2
再考すると、永遠は長い時間です... for i in seq 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
Bruce Edge


0

面白いパズル。クライアントとのアクセスまたは非同期APIがない場合は、次のようにtcpソケットのgreppingを試すことができます。

until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
  printf '.'
  sleep 1
done

しかし、それは1秒間隔のビジー待機です。おそらくそれ以上の解像度が必要です。これもグローバルです。そのサーバーに別の接続が行われると、結果は無効になります。


-1

サーバーが利用可能であるか、原因が再起動であるかなどを確認する必要がある場合は、サーバーにwgetを実行して応答またはエラーを解析しようとすることができます。 --timeout = secondsでwgetタイムアウトを変更できます。タイムアウトを10秒に設定し、応答に対するgrepが結果を返すまでループを作成できます。

これがあなたが探しているものなのか、それとも本当にbashコードが必要なのかわかりません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.