侧边栏壁纸
博主头像
Fonda's Lab 博主等级

关山难越,谁悲失路之人?萍水相逢,尽是他乡之客。

  • 累计撰写 49 篇文章
  • 累计创建 27 个标签
  • 累计收到 1 条评论

目 录CONTENT

文章目录

openwrt规律性掉线问题解决

LouisFonda
2024-05-13 / 0 评论 / 0 点赞 / 19 阅读 / 0 字 / 正在检测是否收录...

openwrt规律性掉线问题解决方案

openwrt每隔几日就会被掉线,之前我使用的方案是每个星期1的时候就会重启一次,但是这种方案有个缺点,因为我要跑网心云,所以一旦重启连接数就会丢失,从而影响收益,后面我直接把openwrt设置成不定时重启,这个时候问题就出现了,每隔五日的7.00我就会被运营商踢下线,这个时候wan自己连不上,我不知道是不是固件问题还是配置问题,我查看了/etc/ppp/options

root@QWRT:/etc/ppp# cat options
#debug
logfile /dev/null
noipdefault
noaccomp
nopcomp
nocrtscts
lock
maxfail 0
persist # 没问题啊

有persist应该是没问题的啊,后面去b站找了电犀牛的视频看了一下,说设置成每日凌晨的时候重播一次就可以了,但是有网就没必要重播啊,于是我按照这个思路重新写了一个shell。我们只需检测是否有网,如果有的话就不重播,如果没有的话,我们就重播不久行了吗?

#!/bin/bash

log_file="/tmp/connection.log"

# 获取当前时间
current_time=$(date +%Y-%m-%d\ %H:%M:%S)

# 检测网络是否能够 ping 通百度
if ! ping -c 1 baidu.com &> /dev/null;then
  # 无法 ping 通,执行重启wan口命令
  ifdown wan && ifup wan
  echo "$current_time ---- WAN口连接已重启。" >> "$log_file"
else
  # 可以 ping 通,说明有网,只记录一下日志
  echo "$current_time ---- WAN口连接正常,无需重启。" >> "$log_file"
fi

现在我们只需要在openwrt里面添加计划任务就可以了

*/30 * * * * /root/restart-wan.sh

日志输出

2024-05-13 13:14:36 ---- WAN口连接正常,无需重启。
2024-05-13 13:21:00 ---- WAN口连接正常,无需重启。
2024-05-13 13:22:00 ---- WAN口连接正常,无需重启。
2024-05-13 13:23:00 ---- WAN口连接正常,无需重启。
2024-05-13 13:24:00 ---- WAN口连接正常,无需重启。
2024-05-13 13:25:00 ---- WAN口连接正常,无需重启。
2024-05-13 13:26:00 ---- WAN口连接正常,无需重启。 # 这前面的日志都是测试的
2024-05-13 13:30:00 ---- WAN口连接正常,无需重启。
2024-05-13 14:00:00 ---- WAN口连接正常,无需重启。
2024-05-13 14:30:00 ---- WAN口连接正常,无需重启。
2024-05-13 15:00:00 ---- WAN口连接正常,无需重启。
2024-05-13 15:30:00 ---- WAN口连接正常,无需重启。

补充

运行了一个月以为没问题了没想到6月1号和6月8号又给我断了,所以这个问题重播是解决不了的,直接把重播改成重启,之前的判断太简单了,现在改成如果丢包率是100%才重启,防止网络波动引起的重启,减少重启次数。

#!/bin/bash

log_file="$HOME/connection.log"

# 获取当前时间
current_time=$(date +%Y-%m-%d\ %H:%M:%S)

# 检测网络是否能够 ping 通 233.5.5.5 4 次并计算丢包率
ping_output=$(ping -c 4 233.5.5.5)
packet_loss=$(echo "$ping_output" | grep -oE '[0-9]+% packet loss' | awk '{print $1}' | tr -d '%')

# 检查 packet_loss 是否为空或非整数
if [ -z "$packet_loss" ]; then
  echo "Error: packet_loss is empty or invalid."
  exit 1
fi

# 如果丢包率是100%,则重启
if [ "$packet_loss" -eq 100 ]; then
  echo "$current_time ---- 丢包率为100%,路由器已重启。" >> "$log_file"
  sleep 5 && touch /etc/banner && reboot
else
  echo "$current_time ---- 网络连接正常,丢包率: $packet_loss%." >> "$log_file"
fi

总结

重启也就1分钟左右,基本上也是无感知的,既然设备已经掉线了,那么重启和重播基本上也没什么区别了,要说唯一区别就是会丢失连接信息。

0

评论区