Ubuntu:系统断网后自动重连指定wifi脚本

1. Preface

有时远端部署的机器人会由于各种外部原因,断开网络,但是之后又没有重新接入网络,直接就失联了,其实就时一个网络重连就可以解决的事情。

2. Solution

1)先查看得到准确的wifi名字,这个很重要。用指令nmcli connection show查询当前系统连接过的wifi,返回如下:

复制代码
NAME      UUID                                  TYPE      DEVICE
HKWIFI    xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx  wifi      wlp3s0

下面以HKWIFI为例。

2)创建自动重连脚本

要在根目录下创建:

复制代码
sudo gedit /usr/local/bin/wifi-reconnect.sh

也可以用你自己熟悉的编辑工具,vim,nano都可以。

然后写入如下内容,记得检查第一行的WIFI_NAME。

复制代码
#!/bin/bash

WIFI_NAME="HKWIFI"
CHECK_HOST="8.8.8.8"

LOG_FILE="/var/log/wifi-reconnect.log"

echo "$(date '+%F %T') Checking Wi-Fi..." >> "$LOG_FILE"

# 如果指定 Wi-Fi 已连接,并且能 ping 通,则不处理
if nmcli -t -f NAME connection show --active | grep -Fxq "$WIFI_NAME"; then
    if ping -c 2 -W 3 "$CHECK_HOST" >/dev/null 2>&1; then
        echo "$(date '+%F %T') Wi-Fi is working." >> "$LOG_FILE"
        exit 0
    fi
fi

echo "$(date '+%F %T') Wi-Fi disconnected or no internet. Reconnecting..." >> "$LOG_FILE"

# 关闭再打开 Wi-Fi
nmcli radio wifi off
sleep 3
nmcli radio wifi on
sleep 5

# 尝试连接指定 Wi-Fi
nmcli connection down "$WIFI_NAME" >/dev/null 2>&1
sleep 2
nmcli connection up "$WIFI_NAME" >> "$LOG_FILE" 2>&1

# 再检查一次
sleep 5
if ping -c 2 -W 3 "$CHECK_HOST" >/dev/null 2>&1; then
    echo "$(date '+%F %T') Reconnected successfully." >> "$LOG_FILE"
else
    echo "$(date '+%F %T') Reconnect failed." >> "$LOG_FILE"
fi

然后还要给权限:

复制代码
sudo chmod +x /usr/local/bin/wifi-reconnect.sh

3)创建 systemd 定时服务

先创建service文件

复制代码
sudo gedit /etc/systemd/system/wifi-reconnect.service

写入:

复制代码
[Unit]
Description=Reconnect Wi-Fi if disconnected
After=NetworkManager.service
Wants=NetworkManager.service

[Service]
Type=oneshot
ExecStart=/usr/local/bin/wifi-reconnect.sh

然后创建timer文件

复制代码
sudo gedit /etc/systemd/system/wifi-reconnect.timer

写入:

复制代码
[Unit]
Description=Run Wi-Fi reconnect check every minute

[Timer]
OnBootSec=30
OnUnitActiveSec=60
Unit=wifi-reconnect.service

[Install]
WantedBy=timers.target

4)启动定时服务

打开terminal,输入:

复制代码
sudo systemctl daemon-reload
sudo systemctl enable --now wifi-reconnect.timer

输入完之后可以查看这个计时器是否正在执行

复制代码
systemctl status wifi-reconnect.timer

然后可以看到返回的信息,显示active状态就是启动成功了

复制代码
● wifi-reconnect.timer - Run Wi-Fi reconnect check every minute
Loaded: loaded (/etc/systemd/system/wifi-reconnect.timer; enabled; vendor pre
Active: active (waiting) since Tue 2026-04-28 15:45:52 HKT; 21min ago
Trigger: Tue 2026-04-28 16:08:08 HKT; 53s left

此外,还能查看它的日志文件:

复制代码
sudo tail -f /var/log/wifi-reconnect.log

可以手段断开网络,看看是否会重连,如果成功重连就说明生效了,同时查看日志文件,也能看到对应的记录。

相关推荐
CANI_PLUS8 小时前
电脑文件共享
运维·服务器
Decay__8 小时前
15_MySQL 数据同步与迁移方案 —— 复制 / DataX / Canal / 异构同步(对标 Oracle GoldenGate)
运维·数据库·sql·mysql·架构
Linux界最忧郁之人8 小时前
华为云ECS&IMS&AS实战|弹性云服务器、私有镜像、弹性伸缩完整实验
linux·运维·服务器·centos·华为云·openstack
后台模板学习8 小时前
GitHub Actions 与 Jenkins 在日志监
运维·github·jenkins
whyutianict_vv9 小时前
零基础转 AI 运维:投入清单、技术路线与核对表
linux·运维·人工智能·ai
无言听风雨丶9 小时前
systemd 与信号 / 僵尸进程:Linux 进程管理的底层逻辑与排错
linux·服务器·网络
DevOpenClub9 小时前
高考一分一段 API:分数查位次、科类枚举与历史对照
linux·数据库·高考
小贾要学习9 小时前
【C++后端开发项目】Reactor 模型 / C++ 仿写 muduo HTTP 服务器:让底层网络库真正跑起网页
linux·服务器·c++·http·网络编程·muduo·reactor模型
Blockbuater_drug9 小时前
OpenMM分子动力学模拟02 安装:Linux:conda 一条命令装通 GPU 加速的分子模拟环境
linux·conda·cuda·gpu驱动·pythonpath·openmm安装
杨云龙UP9 小时前
Oracle 同义词(SYNONYM)详解及 Toad for Oracle SQL 智能补全配置实战
运维·数据库·sql·oracle·同义词·toad·toad for oracle