プロキシが一度失敗します。その後のリクエストは成功しているのに、監視は別の失敗を告げ続けます。スクリプトが昨日の終了ステータスを覚えていないか確認してください。

このパターンは 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 結果のたびにプロキシを再起動すると、正常なセッションを乱し、実際の宛先の問題は手つかずのままになります。

関連記事