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