ฉันใช้เชลล์สคริปต์ด้านล่างของฉันบนเครื่องที่เซิร์ฟเวอร์แอ็พพลิเคชัน c ++ กำลังรันบนพอร์ต 8080 และในเชลล์สคริปต์ฉันกำลังเรียกใช้ URL และเก็บการตอบสนองที่มาจาก URL นั้นในตัวแปร DATA
แต่สมมติว่าเซิร์ฟเวอร์แอปเดียวกันหยุดทำงานแล้วจะไม่สามารถเรียกใช้ URL และจะพิมพ์ออกมาRetrying Again
และพักเป็นเวลา 30 วินาทีจากนั้นเรียกใช้ URL เดิมอีกครั้ง
#!/bin/bash
HOSTNAME=$hostname
DATA=""
RETRY=15
echo $HOSTNAME
while [ $RETRY -gt 0 ]
do
DATA=$(wget -O - -q -t 1 http://$HOSTNAME:8080/beat)
if [ $? -eq 0 ]
then
break
else
echo "Retrying Again" >&2
# restart the server
let RETRY-=1
sleep 30
fi
done
echo "Server is UP"
และนี่HOSTNAME
คือชื่อโฮสต์ท้องถิ่นของเซิร์ฟเวอร์ที่ฉันใช้งานเชลล์สคริปต์ด้านบน
คำชี้แจงปัญหา:-
ตอนนี้สิ่งที่ฉันพยายามทำคือถ้าเซิร์ฟเวอร์ไม่ทำงานมันจะพิมพ์ออกมาRetrying Again
หลังจากนั้นฉันต้องการตรวจสอบว่าพอร์ต8080
เปิดอยู่$HOSTNAME
หรือไม่ ถ้าไม่เช่นนั้นแสดงว่าเซิร์ฟเวอร์หยุดทำงานดังนั้นฉันต้องการรีสตาร์ทเซิร์ฟเวอร์โดยดำเนินการคำสั่งนี้จากนั้นเข้าสู่โหมดสลีปเป็นเวลา 30 วินาทีดังแสดงในเชลล์สคริปต์
/opt/app/test/start_stop.sh start
เป็นไปได้ที่จะทำที่นี่ในสคริปต์เปลือกของฉันหรือไม่
ฉันใช้งานเชลล์สคริปต์นี้บน Ubuntu 12.04
lsof -i :8080 -sTCP:LISTEN
และฉันไม่ได้อะไรเลยบนคอนโซล แต่ถ้าฉันลองทำเช่นนี้netstat -tulpn | grep :8080
ฉันจะได้กระบวนการที่ทำงานบนพอร์ต 8080 ทำไมถึงเป็นเช่นนั้น