Miksi shellin välityspalvelintarkistus jää epäonnistuneeksi, kun curl onnistuu
Vältä vanhan curl-virheen säilyttämistä shell-muuttujassa, kun myöhemmät välityspalvelintarkistukset onnistuvat.
Välityspalvelin epäonnistuu kerran. Myöhemmät pyynnöt onnistuvat, mutta valvoja ilmoittaa edelleen uudesta virheestä. Tarkista, muistiko skripti eilisen poistumistilan.
Tämä kaava päivittää muuttujan vain, kun curl epäonnistuu:
status=0
# Repeated inside a loop:
curl ... || status=$?
Ensimmäisen nollasta poikkeavan tuloksen jälkeen onnistunut kierros jättää status koskemattomaksi. Se ei muutu nollaksi vain siksi, että curl onnistui.
Haarauta sen sijaan nykyisen komennon mukaan:
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
Osoite ja ajat ovat havainnollisia. Tämä poistaa vanhentuneen muuttujan; se ei ratkaise, mikä palautustoimenpide on sopiva.
Pidä havainto kapeana. Pyyntö riippuu välityspalvelimesta, jatkoreitistä, kohteesta, TLS-tarkistuksesta ja HTTP-tuloksesta. Kohteen katkos voi kaataa sen, vaikka SOCKS-palvelu on kunnossa. Odottamaton HTTP 200 -sivu voi myös läpäistä pelkkään tilaan perustuvan tarkistuksen tarjoamatta odotettua sisältöä.
Valitse hallittu vastaussopimus ja säilytä virhevaihe. Välityspalvelimen uudelleenkäynnistys jokaisella nollasta poikkeavalla curl-tuloksella voi häiritä terveitä istuntoja, kun taas todellinen kohdeongelma jää koskemattomaksi.