wlan0 失效,自動重啟,這個網路上有找到一些解法,但是有些太舊方法已經失效。於是這次重做一次,再記錄下來。
總體的概念是,使用 bash script,每隔一段時間測試網路狀況,如果有問題就重啟。
- 測試的方法是用 curl 向 google 與 yahoo 要網頁,有回應就算成功。
- 重啟的動作,ifup/ifdown,ifconfig wlan0 up/down 或是 dhcpcd restart 都無用。ifup/ifdown 在 raspbian 有問題,找不到 wlan0,而後兩個失敗的原因是 route default gateway 的設定會失蹤。解決方法直覺的是使用 `sudo route add default gw 192.168.1.1`,另一個則是在 dhcpcd restart 之前做 `sudo ip addr flush dev wlan0`,而我選擇後者。
- 每隔一段時間執行的動作是使用 cron,在 raspbian 這個版本用的是 anacron,直接在 /etc/crontab 加入設定即可。它自己就會檢查與執行,不用重啟 cron deamon。
完整 bash script 如下:
#!/bin/bash
urls=("http://www.google.com" "http://tw.yahoo.com")
http_code_accept=("200" "301" "302" "404")
count=${#urls[@]}
connected=0echo "now start to check net is on or not"
echo "bash file in /home/pi/net_restart.sh"
#check net is connected or not
for ((i=0;i<$count;i++))
do
url=${urls[$i]}
result=$(curl -o /dev/null -s -m 10 -w "%{http_code}" "$url")
for flag in ${http_code_accept[@]}
do
#echo $flag $result $url
if [ $flag = $result ]; then
connected=$(expr $connected + 1)
echo "accept" $url $connected
fi
done
doneif [ $connected -eq 0 ]; then
echo "network not good"
echo "going to restart network"
ip addr flush dev wlan0
systemctl restart dhcpcd
fi