- ประเด็นมีอยู่ว่า ระบบ web ใช้ Linux + Apache2 + PHP 7 มี client เข้าไปใช้างานเยอะ บางช่วงเวลา
- ทำให้ server 443 ไม่ตอบสนองบางครั้ง คือ freeze ไปเลยว่างั้น กว่าจะกลับมาทำงานปกติก็ใช้เวลานาน
- แก้ไขเบื้องต้นคือ remote เข้าไป restart apache
- เลยหาวิธีเขียน bash script monitor server response 200 เป็นจำนวนครั้งตามที่เราตั้งค่า ถ้าไม่ตอบ 200 ทุกครั้งก็ restart เลย
- พร้อมเก็บ log file และส่ง line notify พร้อม
- ตัวอย่างนี้ เช็ค 3 ครั้งเว้น 3 วินาที ถ้าไม่ตอบ status 200 ทุกครั้ง ให้ restart apache เลย
Solved
#!/bin/bash
now=$(date)
url='https://your_site'
### admin line token
token="iFBqHnx34sHla9rAQ7Qxxxxxxxxxxxxxxxxxxxxx"
message="$url >>> non response >>> /etc/init.d/apache2 restart >>> $now"
i=0
j=0
## 0,1,2
until [ $i -gt 2 ]
do
echo i: $i
((i=i+1))
sleep 3s
status=$(curl --head --location --connect-timeout 5 --write-out %{http_code} --silent --output /dev/null ${url})
[[ $status == 500 ]] || [[ $status == 000 ]] && ((j=j+1)) # do start/restart logic
done
echo "J: $j"
if (( $j == 3 ))
then
echo "J == 3"
echo "restart ${url}: $now" >> /path/log_service_freezed.log
curl -X POST -H "Authorization: Bearer $token" -F "message=$message" https://notify-api.line.me/api/notify
/etc/init.d/apache2 restart
else
echo "J != 3"
fi
Ref
- https://linuxize.com/post/bash-increment-decrement-variable/
- https://www.cyberciti.biz/faq/linux-unix-sleep-bash-scripting/
- https://stackoverflow.com/questions/13086109/check-if-bash-variable-equals-0
No comments:
Post a Comment