curl -fsS --retry 3 --retry-connrefused

スクリプトで「失敗したら気づける・一時的な失敗なら数回やり直す」curl の定番の組み合わせ。

  • -f(–fail): HTTP 4xx/5xx のとき本文を出さず、終了コード 22 で失敗する。付けないとエラーページを受け取っても終了コード 0(成功扱い)
  • -s(–silent): 進捗表示を消す。ただしエラーメッセージも消える
  • -S(–show-error): -s と併用すると、エラーメッセージだけは出す
  • --retry 3: 一時的な失敗なら 3 回までやり直す。待ち時間は 1 秒から倍々(指数バックオフ)
  • --retry-connrefused: 接続拒否(ECONNREFUSED)もやり直しの対象にする

–retry が「一時的な失敗」とみなすもの

タイムアウト、HTTP 408 / 429 / 500 / 502 / 503 / 504 だけ。

接続拒否は含まれない。起動直後でまだポートを開いていないサーバーを叩くと即失敗するので、--retry-connrefused を足す。

  • ECONNREFUSED: 相手のマシンには届いたが、そのポートで待ち受けているプロセスがいない、と OS が返すエラー

参考: https://curl.se/docs/manpage.html