本人居住於唐樓,很早以前便開始使用SIM卡上網取代昂貴8M網上爬。以前一直是使用Asus RT-AC51U加上華為E3372H-153的LTE Dongle來上網的,後來為了更高速的網速體驗,更換了Asus 4G-AC53U直接插SIM卡免煩方案。這樣可以把原先 LTE Dongle + Router的理論上限速度從100Mbps提高到300Mbps。
除了更換了上述方案外,我還更換了網絡供應商 (ISP),速度比以往提升了10多20Mbps。雖然速度提升了不少,但卻常常遇到斷線的問題,尤其繁忙時間更甚。(OS: 可能是這個ISP知道我是用作家居寬頻使用然後故意把我斷線) 斷線後前往路由器主頁觀看,狀態都是“連線中斷”、“沒有偵測到SIM卡”、“您ISP提供的DHCP功能發生錯誤”等等。
遇到以上問題, 正常來說直接等待Router再次連上SIM卡就好 ,但我卻發現我的Asus 4G-AC53U並不會自己重連,而是一直保持斷線狀態。經過Google幫助後,還是搞不清楚道是路由器的問題還是ISP的問題。最後只能亡羊補牢,嘗試設置斷線後自動重新連接,不用每次都手動重啟路由器。
在某個關於 Asuswrt-Merlin 的外國論壇上看到了Asus路由器的某些4G模組相關指令,嘗試自行編寫shell script來重啟interface,但無奈不是每次斷線都能重啟interface就能解決,還有其他原因會導致斷線。把心一橫,不行就直接重啟路由器算了。以下shell script是watchdog script的一種,監視著router如果不能連接google的話就會嘗試重啟interface,如果重啟之後10秒後依然不能連接到google的話就會重啟路由器。
#!/bin/sh
boottime=$(cat /proc/uptime | awk '{ print $1 }')
newboot=${boottime%.*}
if [[ $newboot -ge 300 ]] ; then
echo "Up time is greater than 5 mins..."
if ! ping -w 10 -c 10 www.google.com > /dev/null ; then
echo "No responds from google, restarting usb0 interface..."
ifconfig usb0 down
sleep 10
ifconfig usb0 up
sleep 10
if ! ping -w 10 -c 10 www.google.com > /dev/null ; then
echo "No responds from google AGAIN!!! Rebooting..."
date >> /jffs/reboot-log #log reboot time
reboot
else
echo "Resume Okay, no reboot required."
fi
else
echo "System healthy, exiting..."
exit 1
fi
else
echo "Up time is less than 5 mins, exiting..."
exit 1
fi
我們暫時把以上shell script儲存為 /jffs/watchdog.sh。既然要從背後一直監視著路由器,就一定要把以上shell script使用Cronjob來定時執行吧。Asus路由器也是一個小小的linux系統,裡面有cron daemon,但它並沒有一個管理工具crontab來讓你輕易的管理cron job。因此我們需要手動在 /var/spool/cron/crontabs/<admin名稱> 添加上自己的cron jobs
例如:我的管理員用戶名稱是admin,我就要把新增以下代碼到 /var/spool/cron/crontabs/admin 裡面來計劃每5分鐘執行一次watchdog.sh:
# cron jobs to import into admin's crontab
*/5 * * * * /jffs/watchdog.sh
當你認為所有代碼都準備好的時候,那就大錯特錯了。 因為 /var目錄原來是儲存於一個隨機存取記憶體之中,所以每次重啟路由器的時候,上面那個crontab的代碼便會被刪除。 而儲存 watchdog.sh的儲存位置 /jffs,是一個Asuswrt提供給我們一個小小的儲存空間,不會在重啟路由器的時候刪除的,這正好可以拿來儲存我們的script。 幸好,正所謂上帝關了一扇門必定會再為你打開另一扇窗,Asuswrt有一個隱藏的功能,讓你可以在路由器載入USB drive的時候執行一些代碼,我們可以藉此代碼用來把預先儲存在 /jffs/admin複製到 /var/spool/cron/crontabs/裡面。這樣就可以成功匯入cron job設定檔又不怕路由器重啟刪掉了檔案了。 輸入以下代碼並儲存在 /jffs/copyscript:
cp /jffs/admin /var/spool/cron/crontabs
要注意的是admin是我這邊的登入名稱,如果你的跟我的不一樣,請記得修改喔。另外,為了確保以上檔案能被成功執行,請把 /jffs/copyscript的檔案設定為權限755。
chmod 755 /jffs/copyscript
上面提及過Asuswrt提供了一個隱藏的功能讓我們在載入USB drive的時候執行一個shell script, 接下來我們就要輸入以下代碼來開啟這個功能:
nvram set script_usbmount="/jffs/copyscript"
nvram commit
這樣便是真正的大功告成囉。最後你還可以到 /jffs/reboot-log查看每次重啟路由器的時間,希望可以從中了解掉線的問題是因為路由器本身,還是ISP的陰謀。。。
Be First to Comment