2018年8月29日 星期三

[pi-nas] raspbain 樹莓派 wlan0 失效,自動重啟

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=0

    echo "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
    done

    if [ $connected -eq 0 ]; then
        echo "network not good"
        echo "going to restart network"
        ip addr flush dev wlan0
        systemctl restart dhcpcd
    fi
    ```

沒有留言:

張貼留言