如题 家庭设备: ac86u*2+ac66ub1 mesh组网,nas服务器,30多台子设备……
bg: 某日早上发现手机无法上网,智能家居设备瘫痪,aimesh各个节点都无法访问后台。最后只能手动重启主路由,解决了问题。 “手动”这一点,完全不符合智能家居和远程办公的精神。 至于为啥会死机,猜测是路由死机,因近温度升高,路由后台监测cpu温度一度达到90℃。也有可能是其他原因。
下面是设备温度: 主路由ac86u未装散热90度,装完60左右(柜子里) ac86u mesh节点(露天) ac66ub1 mesh节点(柜子里)
如果某天不在家,再遇到这个情况就完犊子了。过年期间出现过一次,拜托了好朋友入室才解决。
本着不轻易重启设备的原则,进行了如下避坑。
action: 路由器后台植入检测命令,定时轮询去ping相关设备状态(比较重要的设备),发现异常时后台执行reboot指令,自动重启家庭网络环境。 把家庭内比较重要的设备ip地址写入ip列表,然后通过linux的crontab定时任务,循环判断,这些设备能否正常通信,如果不能正常通信,且连续多次不能正常通信就为有问题。让路由器重启。 注:这几个设备必须是那种长期不断电的,不然这个脚本会频繁的重启网络。 改进方法(有兴趣的自己改): 连续重启n次,则该设备硬件有问题。剔除判断,避免断电或者设备死机导致的死循环。 子设备内也植入此功能的脚本,判断能否与主路由、mesh节点通信,若果长时间不能通信,则重启子设备。
setup: 打开路由器的ssh功能,通过scp软件把下面的sh命令文件,放到某文件夹内。然后设置crontab。 此处有坑: 若直接在crontab里输入指令并保存,重启后是会消失的,不能持久性,网上有相关说明,这是路由器后台的bug。 我是在/jffs/Scripts/services-start里输入了命令避坑,cru a PingIP “* */1 * * * /bin/sh /koolshare/PingIP.sh”,这样重启后能自动写入crontab,避免了上面说的问题。 解释一下 * */1 * * * :每隔1小时执行一次PingIP.sh脚本,具体的使用方法百度crontab定时命令。
文件名PingIP.sh,我通过scp放到了/koolshare/文件夹内。
#!/bin/bash
IP_LIST="192.168.1.2 192.168.1.3 192.168.1.4"
maxPingErrorCount=2
errorCount=0
ipListCount=0
haveError=false
for IP in $IP_LIST
do
ipListCount=`expr $ipListCount + 1`
tempErrorNum=0
while [ $tempErrorNum -le $maxPingErrorCount ]
do
if ping -c 1 "$IP" > /dev/null
then
echo "$IP 通信正常."
tempErrorNum=0
break
else
haveError=true
let tempErrorNum++
echo "$IP 第 $tempErrorNum 次 不通了啊."
fi
done
errorCount=`expr $errorCount + $tempErrorNum`
done
echo "总错误次数 $errorCount"
echo "最大错误次数 $maxPingErrorCount"
if [ $errorCount -ge $maxPingErrorCount ]
then
echo "错太多了啊。连接不上了啊。现在重启路由器吧。"
reboot
fi
|