私は現在bashスクリプトを書く方法を学んでいます。私のカールリクエストが200レスポンスコードを受け取ると、whileループをどのように停止しますか?
aws --endpoint-url http://s3.sample.com/ s3 cp hello.php s3://bucket/
while [ true ]
do
curl http://sample.com/hello.php &> /dev/null
done
ベストアンサー1
受け入れられた回答提案された重複ターゲットcurl
サーバーエラーが発生した場合は失敗し、終了22
ステータスを返す方法を示します。これに基づいて、次のように書くことができます。
until curl -s -f -o /dev/null "http://example.com/foo.html"
do
sleep 5
done
「curl
要求された転送が正常に完了するまで5秒待ってからもう一度やり直してください。」というメッセージが表示されます。応答に興味がないと仮定すると、エラーが発生したときにサーバーが-f
失敗し、メッセージと進行状況インジケーターが印刷されないようにします。curl
-s
-o /dev/null
ただし、curl
独自に再試行する機能にはシェルループは必要ありません。たとえば、10回再試行して再試行する前に5秒間休止状態にするには、次のようにします。
curl --retry 10 --retry-delay 5 -s -o /dev/null "http://example.com/foo.html"
または、一時的でないHTTPエラー(404など)でも再試行する場合:
curl --retry 10 -f --retry-all-errors --retry-delay 5 \
-s -o /dev/null "http://example.com/foo.html"
curl
代わりに、応答に特定のHTTPステータスが表示されるまで実行したい場合:
until [ \
"$(curl -s -w '%{http_code}' -o /dev/null "http://example.com/foo.html")" \
-eq 200 ]
do
sleep 5
done
-w
転送が完了すると、curl
フォーマット文字列(ここ)で指定された情報が表示されることを示します。%{http_code}