ฉันกำลังเขียนสคริปต์ที่รีบูตเซิร์ฟเวอร์ต่าง ๆ หลังจากรีบูตฉันต้องการ "รอ" จนกว่าเซิร์ฟเวอร์ทั้งหมดจะกลับมาออนไลน์ (เพื่อให้สิ่งที่เรียบง่ายฉันกำหนดให้ฉันออนไลน์ = pingable)
ดังนั้นสำหรับแต่ละเซิร์ฟเวอร์ฉันทำ
ServerXY_W=1
echo -n "waiting for ServerXY ..."
while (($ServerXY_W == 1))
do
if ping -c 1 -w 0.2 192.168.123.123 &> /dev/null
then
echo "ServerXY is back online!"
ServerXY_W=0
else
echo -n "."
fi
done
สิ่งที่ฉันคาดหวัง (และชอบ) จะเป็นเช่นเอาท์พุท
waiting for ServerXY .................
ServerXY is back online!
จุดที่ .... จะปรากฏทีละหนึ่ง
แต่สิ่งที่เกิดขึ้นจริงคือก่อนมีเพียง
waiting for ServerXY ...
ชั่วขณะหนึ่งและเมื่อเซิร์ฟเวอร์กลับมาฉันจะได้รับจุดสุดท้ายและบรรทัดสุดท้ายเหมือน
waiting for ServerXY ....
ServerXY is back online!
เหตุใดขณะที่ลูปดำเนินการสองครั้งเหมือนครั้งเดียวโดย ping ล้มเหลวและอีกครั้งเมื่อสำเร็จ ping ฉันต้องเปลี่ยนอะไรเพื่อให้ได้จุดเพิ่มเข้ามาในขณะที่ลูป
ฉันทำการทดสอบด้วย IP ที่ไม่มีอยู่จริง แต่มันติดอยู่กับ
waiting for NonExistentServer...
และไม่สิ้นสุดแน่นอน แต่คำถามเดียวกันทำไมไม่........
เพิ่มเข้าไป?