ทำไมการตรวจสอบพร็อกซีในเชลล์จึงยังล้มเหลวหลังจาก 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 ที่ไม่ใช่ศูนย์อาจรบกวนเซสชันที่ดี ในขณะที่ปัญหาแท้จริงที่ปลายทางยังไม่ได้รับการแก้ไข