Proč kontrola proxy v shellu zůstává neúspěšná, i když curl uspěje
Vyhněte se tomu, aby v proměnné shellu zůstalo staré selhání curl poté, co další kontroly proxy uspějí.
Proxy jednou selže. Pozdější požadavky uspějí, ale hlídač dál ohlašuje další selhání. Zkontrolujte, zda si skript pamatuje včerejší návratový stav.
Tento vzor aktualizuje proměnnou jen tehdy, když curl selže:
status=0
# Repeated inside a loop:
curl ... || status=$?
Po prvním nenulovém výsledku ponechá úspěšná iterace status beze změny. Nezmění se na nulu jen proto, že curl uspěl.
Větveňte se místo toho podle aktuálního příkazu:
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
Adresa a časy jsou ilustrativní. Tím se odstraní zastaralá proměnná; nerozhoduje to však, jaká nápravná akce je vhodná.
Udržujte pozorování úzké. Požadavek závisí na proxy, další trase, cíli, ověření TLS a výsledku HTTP. Výpadek cíle jej může shodit, i když je služba SOCKS zdravá. Neočekávaná stránka HTTP 200 také může projít kontrolou založenou jen na stavu, aniž by poskytla očekávaný obsah.
Zvolte řízený kontrakt odpovědi a zachovejte fázi selhání. Restartování proxy při každém nenulovém výsledku curl může narušit zdravé relace, zatímco skutečný problém cíle zůstává nedotčen.