2009年6月28日

FreeBSD MPD PPPoE斷線檢查Script

家裡是用中華電信FTTB的VDSL,設定實際上就是PPPoE的設定,而我使用FreeBSD+pf+mpd當NAT。

雖然中華電信大部分情況下都滿穩的,不大會斷線(可能VDSL過熱、機房改設定...等原因吧),但有時候就是會不知道什麼原因斷線,mpd上關於重新連線的設定雖然有加,但似乎沒啥效果,斷線後就是沒IP不會重新連線。

這次又發生了這樣的情況,為瞭解決這樣的問題,寫了個超簡單斷線檢查Script,在發生PPPoE斷線時自動把電腦重新開機。

#!/bin/tcsh

if(== `/sbin/ifconfig | /usr/bin/sed '/-->/\\!d' | /usr/bin/awk '{ print $2 }'`) then
/sbin/reboot
endif


程式碼超級簡單,當執行它之後,它會執行

/sbin/ifconfig | /usr/bin/sed '/-->/\!d' | /usr/bin/awk '{ print $2 }'


也就是執行ifconfig,然後找「-->」,找到後把第二個字串取出(PPPoE取得的IP),如果找不到,顯然就是PPPoE斷線了。
接著透過 tcsh 的 if 判斷式,判斷上述指令「找不到時」,就執行裡面的指令

/sbin/reboot


完成後改好權限,把它放入/etc/crontab中

*/30 * * * * root /usr/local/bin/disconnect-check.sh


如此一來,每30分鐘它都會執行一次,看看PPPoE有沒有秀斗,如果秀斗了,就把電腦重開。

我有測試過,應該是能夠work的。

3 意見:

jz 提到...

用 monit 來監控也蠻方便的,它本身可以設定些判斷邏輯(ex:ping 不出去, 某個port 沒開), 條件成立的話可以執行其他程式 .. ^^ 只是 daemon 還是會佔些記憶體啦 ..

阿呆 提到...

長知識了~
謝謝您的介紹,我會拿來玩玩看的,好用可以換上去用,或者用在其它地方(我看它可以監控的東西很多)。

DR 提到...

感謝分享

不過
reboot會不會太殺?
網路不穩不就30分鐘重開一遍
killall ppp;ppp -ddial my_profile_name就好啦

只檢查IP存不存在好像也有點草率
我遇過幾次IP還在卻無法連線的
可能要多判斷一些條件吧