Почему проверка прокси в оболочке остаётся неудачной после успеха 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 может нарушить здоровые сессии, а настоящая проблема назначения останется нетронутой.