我的软路由总时不时的不明原因掉网,重启才能好,烦!!!要是能自动检测断网,自己重启就好了,闲来蛋疼,搞起来...
折腾的时候遇见了好多坑,特别在cronb这!
什么是软路由?能实现什么功能?请参考:
https://zhuanlan.zhihu.com/p/104639279
开始思路
Step1:写一个网络检测脚本,实时监测网络状态,如果不断网继续检测,断网则重启路由,myreboot.sh脚本如下:
#!/bin/sh
if ping -c 3 www.baidu.com grep "bytes"
then
date >> network.log
echo "Network is fine, Go on checking" >> network.log
else
date >> networkWrong.log
echo "Network is dead, rebooting 1 minute later" >> networkWrong.log
reboot -d 30
fi
注意:network.log如果不写成绝对地址,则自动保存到root文件夹下,myreboot.sh脚本最好也放在root文件夹下...
Step2: 再把这个脚本写在crontab中定时运行就可以了,crontab -e把定时运行的命令写进去
* * * * * sh myreboot.sh
一分钟检测一次,每次检测的结果都会写到network.log的日志文件中,不错...
到这里似乎大功告成了,其实并没有。
如果你重启下路由,就会发现crontab中我写的定时任务没有了,但是系统自己的定时任务还完好如初。欺负人,这该如何是好!
经过各种尝试,终于认识到Openwrt并不会保存crontab中的命令,而是根据系统初始化程序填充进去的,有了这个认识就好解决了。思路:写个脚本随系统启动,这个脚本的工作就是把运行命令填充到crontab中。
Step1:写个随系统启动的脚本myorder.sh
echo "* * * * * if ping -c 1 http://www.baidu.com | grep bytes; then date>>network.log; else date >> networkWrong.log && sleep 5 && touch /etc/banner && reboot; fi" >> /etc/crontabs/root
其中,/etc/crontabs/root是crontab文件
Step2: 找到/etc/rc.local文件,把要启动的脚本放在其中
路由无论怎么重启,crontab中都会出现定时检测任务了,这次是真的大功告成了!!!