收起左侧

WI-FI断连,重启网卡的记录解决方案

0
回复
56
查看
[ 复制链接 ]

4

主题

3

回帖

0

牛值

江湖小虾

fnOS1.0上线纪念勋章

问题描述:飞牛部署在一台旧笔记本上,只有WI-FI功能,上游的小米路由器默认是在凌晨4.00的时候升级系统,碰到小米路由器升级系统后,飞牛会出现WI-FI断连,无IP地址的现象

解决方案:通过飞牛的任务计划功能,执行脚本,通过定时脚本,检测是否连接Wi-Fi,如果断连则重启网卡

`#!/bin/bash

确保目标目录存在,避免创建脚本失败

TARGET_DIR="/自定义存储路径/wifi_check"
mkdir -p "${TARGET_DIR}" || { echo "创建目录失败"; exit 1; }

生成脚本文件(使用EOF闭合,避免隐藏字符)

cat > "${TARGET_DIR}/wifi_check.sh" << 'EOF'
#!/bin/bash
set -euo pipefail # 增强错误检测:未定义变量报错、管道失败也报错
trap 'echo "(date) 脚本异常退出: 行号 LINENO" >> "${LOG_FILE}"' ERR # 捕获错误并记录行号

强制指定编码,避免字符问题

export LANG=en_US.UTF-8
export LC_ALL=en_US.UTF-8

配置参数(集中管理,方便修改)

SSID="你的WiFi名称"
WLAN="你的无线网卡名" # 可通过ip addr查看,如wlan0/wlpXXs0
GATEWAY="你的网关IP" # 通常是路由器IP,如192.168.1.1
LOG_FILE="/自定义存储路径/wifi_check/wifi_check.log"

确保日志目录存在,创建日志文件并赋予写入权限

mkdir -p "(dirname "{LOG_FILE}")"
touch "${LOG_FILE}" || { echo "创建日志文件失败"; exit 1; }
chmod 666 "${LOG_FILE}"

日志函数(简化日志写入,统一格式)

log() {
echo "[(date +'%Y-%m-%d %H:%M:%S')] $1" >> "{LOG_FILE}"
}

开始执行

log "===== 脚本开始执行 ====="

检测网关(增加超时,避免卡住,屏蔽输出)

log "开始检测网关: ${GATEWAY}"
if ping -c 2 -W 3 "${GATEWAY}" > /dev/null 2>&1; then
log "网络正常,网关 ${GATEWAY} 可达"
else
log "网络断开,开始自动重连WiFi: ${SSID}"

# 断开WiFi(忽略单次失败,继续执行)
if nmcli connection down "${SSID}" > /dev/null 2>&1; then
    log "成功断开WiFi: ${SSID}"
else
    log "断开WiFi ${SSID} 失败(可能未连接)"
fi

sleep 2

# 重新连接WiFi
if nmcli connection up "${SSID}" > /dev/null 2>&1; then
    log "成功重新连接WiFi: ${SSID}"
else
    log "连接WiFi ${SSID} 失败"
fi

sleep 3

# 再次检测网关,失败则重启网卡
if ! ping -c 2 -W 3 "${GATEWAY}" > /dev/null 2>&1; then
    log "重连WiFi后网关仍不可达,重启无线网卡: ${WLAN}"
  
    # 重启网卡(需要root权限)
    if ip link set "${WLAN}" down > /dev/null 2>&1; then
        log "成功关闭网卡: ${WLAN}"
    else
        log "关闭网卡 ${WLAN} 失败(可能需要root权限)"
    fi
  
    sleep 2
  
    if ip link set "${WLAN}" up > /dev/null 2>&1; then
        log "成功开启网卡: ${WLAN}"
    else
        log "开启网卡 ${WLAN} 失败(可能需要root权限)"
    fi
fi

fi

log "===== 脚本执行结束 ====="
EOF

赋予脚本执行权限

chmod +x "${TARGET_DIR}/wifi_check.sh" || { echo "赋予执行权限失败"; exit 1; }

手动执行脚本(提示执行结果)

echo "开始手动执行WiFi检测脚本..."
if "${TARGET_DIR}/wifi_check.sh"; then
echo "脚本执行完成,查看日志:"
cat "${TARGET_DIR}/wifi_check.log"
else
echo "脚本执行异常!"
cat "${TARGET_DIR}/wifi_check.log"
exit 1
fi
`

收藏
送赞
分享
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则