您在這裡

OpenWRT路由器中監控網絡服務并重啟的腳本

James Qi 在 2014年5月7日 - 22:42 發表

  前一陣子寫了一篇《俺在德國上網的十八般武藝》和一篇《修改OpenWRT的設置接入802.1X認證的網絡》,這個CF-E218N遠程Wifi放大器确實幫了我的大忙,可以足不出戶就連接上百米以外的WLan。

  不過從第一天開始就發現有路由器偶然中斷的情況,也就是電腦或者移動終端突然會斷網找不到Wifi熱點,這時跑過去看路由器,會發現背後幾個LED燈在不停閃爍,而正常情況下是顯示遠程無線信号強弱的。故障間隔時間上不固定,有時十幾個小時會斷一次,有時幾個小時,或者幾天,好像是與使用頻繁程度有關,網絡越繁忙就越容易出故障。偶爾也出現過出問題後路由器自己恢複的情況,但多數情況下都無法自己恢複,隻好人工去把電源關閉、再接通,讓路由器重啟,這樣幾分鐘後可以恢複。

  但這樣也比較麻煩,想到能否有機制自動檢測故障然後自動排除故障恢複訪問呢?在網上找了一些資料,看到還是有人在Linux平台下編寫腳本來做這個事情的,各種平台、各種路由器、各種監控手段和腳本都有,我這裡結合自己的情況記錄一下:

  在/root下編寫一個my_watchdog.sh腳本:

#!/bin/sh
#sleep 100
DATE=`date +%Y-%m-%d-%H:%M:%S`
tries=0
echo --- my_watchdog start ---
while [[ $tries -lt 5 ]]
do
        if /bin/ping -c 1 8.8.8.8 >/dev/null
        then
                echo --- exit ---
#               echo $DATE OK >>my_watchdog.log
                exit 0
        fi
        tries=$((tries+1))
        sleep 10
#       echo $DATE tries: $tries >>my_watchdog.log
done

echo $DATE network restart >>my_watchdog.log
/etc/init.d/network restart

#echo $DATE reboot >>my_watchdog.log
#reboot

  然後用crontab -e來在系統的crontab中添加一句,每隔5分鐘定時運行這個腳本:

*/5 * * * * sh /root/my_watchdog.sh

0 0,4,8,12,16,20 * * * date -u  +"%Y.%m.%d-%H:%M:%S" >/usr/data/time_backup
0,1,11,21,31,41,51 * * * * /usr/bin/set_kernel_timezone >/dev/null 2>&1
0 0,4,8,12,16,20 * * * /tmp/bw_backup/do_bw_backup.sh

  幾個注意的地方:

  • 這個腳本是通過PING Google的DNS服務器8.8.8.8來判斷網絡是否連通的
  • 連續5次不能PING通,中間間隔10秒,就判斷為網絡故障
  • 我先考慮的處理辦法是重啟路由器,後來嘗試用網絡服務重啟就可以恢複
  • 增加了一個my_watchdog.log的日志文件,記錄故障、重啟的時間、次數
  • 路由器的固态硬盤容量非常小,隻有2M多,日志文件都不能大了,所以注釋掉了一些不是很必要的運行記錄
  • 腳本運行時間間隔不宜太短,否則在沒有WLan網絡連接的情況下會不斷重啟網絡服務,都無法登陸進去修改設置了,現在設定的5分鐘對于登錄修改、停止腳本運行還是夠了

  這個腳本運行了24小時,自動發現兩次故障、自動重啟網絡服務兩次,都正常恢複了,比人工來處理還是方便一些。不過如果能查到具體故障原因、徹底消除隐患才好,但那是高手才能做到的事情,我這種水平也就可以先做點臨時修補、治标不治本的工作吧。

回應

多謝博主的腳本,不過我在X86_64平台上測試發現,如果使用重啟網絡服務的方式,則會出現在OpenWRT的概覽頁面顯示wan已經連接,但是實際上并無法連接上網的狀況,不得已還是改回了reboot,不知道可否解釋一下什麼原因?

發表新回應

Plain text

  • 不允許使用 HTML 標籤。
  • 自動將網址與電子郵件地址轉變為連結。
  • 自動斷行和分段。