چرا بررسی پروکسی در پوسته پس از موفقیت 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 میتواند نشستهای سالم را مختل کند و در همان حال مشکل واقعی مقصد دستنخورده بماند.