🕓

curlの1コマンドでWebサーバーの起動を待つ

2023/07/15に公開

CI環境など、シェルスクリプトでWebサーバーの起動を待ちたいことがあります。Bashのループなどを使う方法も考えられますが、もっと簡単に実現したいと思って調べてみたところ、curlのオプションだけでシンプルに実現できることがわかりました。

次のコマンドで、エラーなくHTTPレスポンスを得られるまで、1秒間隔で最大30回リトライできます。

curl --retry 30 --retry-delay 1 --retry-all-errors http://localhost:8080

それぞれのオプションの意味は次のとおりです。

  • --retry <num> リトライ回数を指定します。初回分は含まないので、上記だと最大31回リクエストします。
  • --retry-delay <seconds>: リトライまでの秒数を指定します。指定しない場合はデフォルトの指数バックオフが使われます。
  • --retry-all-errors: 全てのエラー時にリトライします。

中でも --retry-all-errors は比較的新しいオプションで、curl 7.71.0以降で利用できます。

なお、上記のコマンドではHTTPステータスコードが4xxや5xxでもエラー扱いにはならず、リトライされません。HTTPステータスコードに応じてリトライしたい場合は、--fail オプションをつけます。

参考

Discussion