可以通过飞牛的任务计划功能,通过执行定时任务脚本解决,脚本如下:
#!/bin/bash
# WiFi自动检测重连脚本,基于nmcli(NetworkManager)
# 逻辑:断连重连 → 失败则重启网卡 → 网卡重启后再重连,仍失败则整机重启
# ========== 配置区,请修改为你自己的参数 ==========
WIFI_CON_NAME="WiFi-wlan0" # nmcli保存的WiFi连接配置名,执行 nmcli connection show 查看
WLAN_DEV="wlan0" # 无线网卡设备名,nmcli device status查看
PING_TARGET="8.8.8.8" # 外网检测地址
PING_COUNT=3 # ping发包次数,判断网络
# ================================================
LOG_FILE="/var/log/wifi_repair.log"
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" >> "$LOG_FILE"
}
retry_after_reset_wlan() {
log "网卡重启完毕,再次尝试连接WiFi[$WIFI_CON_NAME]"
sleep 2
if nmcli connection up "$WIFI_CON_NAME"; then
log "网卡重启后重连WiFi成功,恢复网络"
else
log "网卡重启后依旧连接失败,系统即将重启自救"
sleep 1
sudo reboot
fi
}
active_wifi=$(nmcli connection show --active | grep "$WIFI_CON_NAME")
if [ -n "$active_wifi" ]; then
log "已连接WiFi[$WIFI_CON_NAME],检测外网连通性"
if ping -c "$PING_COUNT" -W 2 "$PING_TARGET" > /dev/null 2>&1; then
log "网络正常,无需修复"
exit 0
else
log "WiFi已连接但外网不通,执行断开重连"
nmcli connection down "$WIFI_CON_NAME"
sleep 2
if nmcli connection up "$WIFI_CON_NAME"; then
log "重连WiFi成功"
else
log "WiFi重连失败,重启无线网卡"
nmcli device disconnect "$WLAN_DEV"
sleep 3
nmcli device connect "$WLAN_DEV"
retry_after_reset_wlan
fi
fi
else
log "未连接目标WiFi[$WIFI_CON_NAME],尝试连接"
if nmcli connection up "$WIFI_CON_NAME"; then
log "WiFi连接成功"
else
log "WiFi初次连接失败,重启无线网卡重试"
nmcli device disconnect "$WLAN_DEV"
sleep 3
nmcli device connect "$WLAN_DEV"
retry_after_reset_wlan
fi
fi
有个注意事项:任务计划 中的用户必须设置为root用户;原因是最新版本的飞牛,普通用户(包括admin)无法使用ping命令