タイムアウトとリトライ
Coddyの「ターミナルで学ぶネットワーク」コースのレッスン 45/47。
デフォルトでは、curl は非常に長い時間待機します。スクリプトでは、これはバグになります。到達不能なホストが1つあるだけで、誰かが気づくまでジョブがハングしてしまいます。
curl -s --max-time 5 --connect-timeout 2 URL--connect-timeout は、接続の確立にかける時間を制限します。--max-time は、操作全体の時間を制限します。どちらか一方を超えると、終了コード28になります。
再試行には、見た目以上の注意が必要です。失敗したGETやPUTを繰り返すのは安全です。どちらも冪等だからです。POSTを繰り返すと、2つ目のレコードが作成される可能性があります。しかも、タイムアウトはPOSTにとって最悪のケースです。最初のリクエストが処理されたかどうかを知ることができないからです。
そのため、読み取りは自由に再試行し、書き込みを再試行する前には考えるようにします。必要な場合は、冪等性キーのように、安全に実行する方法をサーバーに尋ねてください。
チャレンジ
中級決して応答されないリクエストに制限時間を設定します。
トラフィックを黙って飲み込むアドレス http://10.255.255.1/ にリクエストを送り、2 秒後に諦めて、curl の終了コードに続けて gave up: を表示します。
期待される出力:
gave up: 28タイムアウトがなければ、このリクエストは 1 分を大幅に超えてハングします。
自分で試してみよう
このレッスンには短いクイズがあります。レッスンを始めて解答し、進捗を記録しましょう。
ターミナルで学ぶネットワークのすべてのレッスン
自分で練習してみよう: Terminalプレイグラウンド