curl が成功してもシェルのプロキシ確認が失敗のままになる理由
後続のプロキシ確認が成功した後も、シェル変数に古い curl の失敗を残さないようにします。
プロキシが一度失敗します。その後のリクエストは成功しているのに、監視は別の失敗を告げ続けます。スクリプトが昨日の終了ステータスを覚えていないか確認してください。
このパターンは curl が失敗したときだけ変数を更新します:
status=0
# Repeated inside a loop:
curl ... || status=$?
最初の非ゼロの結果の後、成功した繰り返しでは status は変わらないままです。curl が成功したというだけでゼロになるわけではありません。
代わりに現在のコマンドで分岐します:
if curl --proxy socks5h://127.0.0.1:1080 --noproxy '' \
--fail --silent --show-error --connect-timeout 3 --max-time 10 \
https://health.example/ >/dev/null; then
echo "check succeeded"
else
echo "check failed"
fi
アドレスと時間は例示です。これは古い変数を取り除きますが、どの復旧措置が適切かは決めません。
観測は狭く保ちます。リクエストはプロキシ、先の経路、宛先、TLS 検証、HTTP の結果に依存します。SOCKS サービスが正常でも、宛先の障害で失敗することがあります。予期しない HTTP 200 ページも、期待した内容を返さずにステータスだけの確認を通り抜けられます。
制御された応答契約を選び、失敗の段階を保持します。非ゼロの curl 結果のたびにプロキシを再起動すると、正常なセッションを乱し、実際の宛先の問題は手つかずのままになります。