เนื่องจากผมเกิดปัญหา Run Raspberry Pi 24/7 แล้ว wireless เกิดการเชื่อมต่อไม่ได้ โดย script ที่ผมเขียนต่อไปนี้จะอธิบายการแก้ปัญหา wireless เป็น 2 แบบ
แบบที่ 1 คือผมจะ ping 5 ครั้ง ไปที่ ip default gateway ทุกที่ 10 นาที หากหลุดหมดทั้ง 5 ครั้ง
ผมจะทำการเปิดปิด wireless ใหม่เพื่อให้ wireless เชื่อมต่อใหม่
(แล้วทำการเขียนข้อมูลบนไฟล์ log ว่า มีการ reconnect)
แบบที่ 2 หากเปิดปิด wireless ใหม่ครบ 3 ครั้งแล้วยัง ping ไม่เจอ (หลุดประมาณ 30 นาที) จะทำการ restart
(แล้วทำการเขียนข้อมูลบนไฟล์ log ว่า มีการ restart)
ขั้นตอนการสร้าง และ Run Script
1. สร้างโฟลเดอร์ชื่อ 'sh' ด้วยคำสั่ง
sudo mkdir /home/pi/sh
2. สร้างไฟล์ sh ชื่อ 'reconnect.sh' ด้วยคำสั่ง
sudo nano /home/pi/sh/reconnect.sh
3. code ใน 'reconnect.sh'
#!/bin/bash i=0 j=0 ping=5 freeze=3 #แก้ไข default gateway ที่ทำการ ping gateway='192.168.1.1' while true; do # ตรวจทุกๆ 10 นาที sleep 600 clear while true; do # ping sleep 3 ping -c2 ${gateway} > /dev/null if [ $? != 0 ] then i=$((i+1)) # ping 5 ครั้งหากไม่เจอให้ reset wireless if [ "$i" -ge "$ping" ] then #ถ้า ping ไม่เจอทำการ restart wireless sudo ip link set wlan0 down sleep 3 sudo ip link set wlan0 up i=0 j=$((j+1)) echo "`date +%d-%m-%Y_%H:%M:%S` : Reconnect" >> /home/pi/sh/wireless.log break fi else #ถ้า ping เจอ reset ค่า i=0 j=0 break fi done; #หากเปิดปิด wireless 3 ครั้งแล้วยัง ping ไม่เจอ restart raspberry pi if [ "$j" -ge "$freeze" ] then ping -c2 ${gateway} > /dev/null if [ $? != 0 ] then echo "`date +%d-%m-%Y_%H:%M:%S` : Reboot" >> /home/pi/sh/wireless.log sleep 3 sudo init 6 else i=0 j=0 fi fi done;4. ตั้ง script ให้ auto start ด้วย 'crontab'
sudo crontab -e
4.1 เพิ่มข้อความ
"@reboot sudo sh /home/pi/sh/reconnect.sh >/dev/null 2>&1"
# m h dom mon dow command @reboot sudo sh /home/pi/sh/reconnect.sh >/dev/null 2>&1
5. สามารถดู log ด้วยคำสั่ง
sudo cat /home/pi/sh/wireless.log
No comments:
Post a Comment