curl 成功之后,Shell 代理检查为何仍显示失败
避免在后续代理检查成功之后,仍把旧的 curl 失败留在 shell 变量里。
代理失败了一次。之后的请求都成功,监视脚本却继续报告另一次失败。先看看脚本是不是记住了昨天的退出状态。
这个写法只在 curl 失败时更新变量:
status=0
# Repeated inside a loop:
curl ... || status=$?
第一次得到非零结果后,成功的那次循环并不会改动 status。它不会因为 curl 成功就自动变成 0。
改为直接对当前命令分支:
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 结果都重启代理,可能打断正常会话,而真正的目标问题依然没被处理。