OpenWrt路由器在光猫断电之后,不能自动重新拨号获取IP,网上搜索了一下,发现大神 朱君绰绰 已经写了脚本,就不重复造轮子了。可能对于小白而言,实现起来还是有点难。于是就有了这个教程。
脚本如下,记得复制到记事本,另存为my_pppoe.sh。
#!/bin/sh #网络检测脚本 通过PING来判断网络互通状态 #by:朱君绰绰 V1.5 #shell测试命令 #./my_pppoe.sh runA #计划任务命令 #*/5 * * * * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1 #状态解释(State) # Carry Out=执行脚本 # Create Log=创建日志文件 # Clear Log = 清空日志内容 # Log Byte 123/456=日志文件大小 # Ping 8.8.8.8=ping # Ping 8.8.8.8 Yes=ping正常 # Ping 8.8.8.8 No=ping异常 # Ping Retry 1/3=ping重试 # Restart Wan=重连wan # Restart Wan Yes=重连wan完成 # Restart Network=重启网络进程 # Restart Network Yes=重启网络进程完成 # Restart Reboot=重启路由器 # Restart Reboot Yes=已发送重启路由器命令 #相关变量解释 # LogMax=日志大小(KB) # LogFile=日志文件 # PingA,PingB=IP地址 # CycleIndex=重试次数 # IntervalTime=重试间隔时间(秒) function NowTimeCall() { NowTime=$(date "+%Y-%m-%d %H:%M:%S") } function LogTextCall() { if [ ! -f "$1" ]; then echo "$NowTime - State:Create Log" else Size=`ls -l $1 | awk '{ print $5 }'` Max=$((1024*$2)) if [ $Size -ge $Max ]; then cat /dev/null > $1 echo "$NowTime - State:Clear Log" else echo "$NowTime - State:Log Byte $Size/$Max" fi fi } #NowTime=$(date "+%Y-%m-%d %H:%M:%S") NowTimeCall echo "<my_pppoe> ----------------------------------------------" echo "$NowTime - State:Carry Out" LogMax=512 LogFile="/root/my_pppoe.log" PingA=114.114.114.114 PingB=202.108.22.5 CycleIndex=3 IntervalTime=10 LogTextCall $LogFile $LogMax i=0 PingError=0 while [[ $i -lt $CycleIndex ]] do NowTimeCall echo "$NowTime - State:Ping $PingA" if /bin/ping -c 1 $PingA >/dev/null then NowTimeCall echo "$NowTime - State:Ping $PingA Yes" PingError=0 break else NowTimeCall echo "$NowTime - State:Ping $PingA No" NowTimeCall echo "$NowTime - State:Ping $PingB" if /bin/ping -c 1 $PingB >/dev/null then NowTimeCall echo "$NowTime - State:Ping $PingB Yes" PingError=0 break else NowTimeCall echo "$NowTime - State:Ping $PingB No" i=$(($i + 1)) echo "$NowTime - State:Ping Retry $i/$CycleIndex" PingError=1 sleep $IntervalTime fi fi done if [ $PingError = 1 ]; then if [ $1 = runA ]; then NowTimeCall echo "$NowTime - State:Restart Wan" ifup wan NowTimeCall echo "$NowTime - State:Restart Wan Yes" fi if [ $1 = runB ]; then NowTimeCall echo "$NowTime - State:Restart Network" /etc/init.d/network restart NowTimeCall echo "$NowTime - State:Restart Network Yes" fi if [ $1 = runC ]; then NowTimeCall echo "$NowTime - State:Restart Reboot" echo "$NowTime - State:Restart Reboot Yes" reboot fi fi exit 0
具体步骤如下:
1. 上传脚本到root目录并修改权限。
A. 下载WinSCP,安装。
2. 测试脚本是否有效。
3. 设定计划任务。
A. 系统->计划任务,添加下列命令中的一条,按需设置。
注意命令首尾无空格
1分钟执行一次,异常重启wan
*/1 * * * * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1
2分钟执行一次,异常重启wan
*/2 * * * * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1
5分钟执行一次,异常重启wan
*/5 * * * * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1
5分钟执行一次,异常重启网络连接
*/5 * * * * /root/my_pppoe.sh runB >> /root/my_pppoe.log 2>&1
5分钟执行一次,异常重启路由器
*/5 * * * * /root/my_pppoe.sh runC >> /root/my_pppoe.log 2>&1
runA=重启WAN(极力推荐),支持1-30分钟
runB =重启网络连接(不推荐),支持5-30分钟,最少需要5分钟(设置太短可能无法进入路由器后台)
runC =重启路由(不推荐),支持5-30分钟,最少需要5分钟(设置太短可能无法进入路由器后台)
这里我设置的是2分钟执行一次,异常重启WAN。
*/2 * * * * /root/my_pppoe.sh runA >> /root/my_pppoe.log 2>&1
欢迎您使用我的教程,赞赏随缘随意,无需介怀您对此没有付出任何经济上的贡献。如果您转载的话,麻烦您注明一下出处。因为一篇图文并茂的文章写下来,差不多要一到三个小时。感谢您对我劳动的尊重。