华硕的路由器,不知什么原因,总是会不定期连不上公网,在网络地图的互联网状态,会显示连接失败的状态。
测试了一下发现,ACU86U在上级的光猫路由器比如重启,比如间歇断网之后,哪怕上级路由器恢复,ac86u还是无法重连外网。我测试了断开上级的光猫路由的电源插头再插上,发现AC86U不会自动重拨,AC86U就一直连不上外网了。直到重启。
为了解决这个问题,我写了个check_wan.sh脚本,定期检查是否能正常访问国内百度网页,如果不能说明访问外网有问题,就重启路由器。脚本如下:
1 2 3 4 5 6 7 8 9 10 11 12 |
#!/bin/sh LOGTIME=$(date "+%Y-%m-%d %H:%M:%S") wget -4 --spider --quiet --tries=5 --timeout=3 www.baidu.com if [ "$?" == "0" ]; then echo '['$LOGTIME'] Access ChinaNet OK.' else echo '['$LOGTIME'] Problem decteted, restarting Router after 10 seconds......' sleep 10 /sbin/reboot fi |
脚本需要放到crontab中进行,但是需要处理一下。不然的话,重启路由器之后,crontab就消失了。参考《[固件讨论] 求助大佬们 如何用cru命令定时运行一个脚本》
新建/jffs/scripts/init-start (如果不存在的话),内容如下:
1 2 3 4 |
#!/bin/sh sleep 180 cru a ScheduledCheckWan "* * * * * /jffs/scripts/check_wan.sh >> /tmp/mnt/FLASH4GKING/check_wan.log 2>&1" cru a ScheduledCleanCheckWanLog "01 00 1 * * echo "" > /tmp/mnt/FLASH4GKING/check_wan.log" |
注意这里的log是放在路由器的外接优盘上的。/tmp/mnt/FLASH4GKING/check_wan.log。这个外接优盘是用来用路由器的虚拟内存的。见《[虚拟内存] 【进阶类教程】为路由器梅林固件增加虚拟内存 2018/7/14》
log放虚拟内存的所在路径的好处是,不占据路由器系统的其他空间,且也不会重启就删除掉。你可以定期的去检查一下,路由器因为连不上外网导致重启的情况。
注意这里有个sleep 180秒,是延后写入crontab,这样的话,因为即使是每分钟检查一次,也不会因为刚刚启动,就检查连不上公网,就重启,再启动后检查还是连不上公网,反复重启。因为在上级光猫坏掉的情况下,你还是可以在180内进路由器去修改脚本的。
路由器启动3分钟后,在crontab中看到的结果是这样的:
1 2 3 4 |
admin@LoveHouse-RT:/jffs/scripts# crontab -l * * * * * /jffs/scripts/check_wan.sh >> /tmp/mnt/FLASH4GKING/check_wan.log 2>&1 #ScheduledCheckWan# 01 00 1 * * echo > /tmp/mnt/FLASH4GKING/check_wan.log #ScheduledCleanCheckWanLog# admin@LoveHouse-RT:/jffs/scripts# |