雖然中華電信大部分情況下都滿穩的,不大會斷線(可能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的。
2013-08-30更新
程式更新如下
#!/bin/tcsh
if( ! -e /var/log/disconnect-reboot.log ) then
touch /var/log/disconnect-reboot.log
endif
if(== `/sbin/ifconfig ng0`) then
echo `date +%Y-%m-%d\ %H:%M:%S` reboot >> /var/log/disconnect-reboot.log
reboot
else
if(== `/sbin/ifconfig ng0 | /usr/bin/sed '/-->/\\!d'`) then
echo `date +%Y-%m-%d\ %H:%M:%S` mpd restart >> /var/log/disconnect-reboot.log
/usr/local/etc/rc.d/mpd5 restart
endif
endif
新增與修改:
1. 檢查log檔案是否存在,不存在則建立
2. 如果裝置ng0不存在,重新開機(異常情況)
3. 如果裝置ng0存在,但沒有IP,將mpd重新啟動(通常的斷線情況)