前一陣子寫了一篇《俺在德國上網的十八般武藝》和一篇《修改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小時,自動發現兩次故障、自動重啟網絡服務兩次,都正常恢複了,比人工來處理還是方便一些。不過如果能查到具體故障原因、徹底消除隐患才好,但那是高手才能做到的事情,我這種水平也就可以先做點臨時修補、治标不治本的工作吧。
评论4
感謝博主分享, 我在此基礎上增加:
感謝博主分享, 我在此基礎上增加: 1.避免重複寫日志; 2.增加微信通知功能; 項目地址:https://github.com/q629988171/my_watchdog/謝謝你的github項目中放置了來源鍊接為我這篇博客😄
謝謝你的github項目中放置了來源鍊接為我這篇博客😄
多謝博主的腳本,不過我在X86_64平台上測試發現
多謝博主的腳本,不過我在X86_64平台上測試發現,如果使用重啟網絡服務的方式,則會出現在OpenWRT的概覽頁面顯示wan已經連接,但是實際上并無法連接上網的狀況,不得已還是改回了reboot,不知道可否解釋一下什麼原因?你好,我自己現在已經沒有用這個系統了,手頭無法實驗
你好,我自己現在已經沒有用這個系統了,手頭無法實驗,所以還不好解釋,抱歉。