ubuntu检测断网后自动重启网卡

以下是实现Ubuntu在检测到网络中断时自动重启NetworkManager服务的步骤:

### 1. 创建监控脚本
保存以下内容为`/usr/local/bin/network-restart.sh`:

```bash
#!/bin/bash

TARGET="8.8.8.8"  # 检测目标,可替换为可靠IP或域名
FAIL_THRESHOLD=3   # 连续失败次数阈值
INTERVAL=5         # 正常检测间隔(秒)
FAIL_INTERVAL=60   # 重启后等待时间(秒)

fail_count=0

while true; do
    if ping -c 2 -W 1 "$TARGET" &>/dev/null; then
        fail_count=0
        sleep $INTERVAL
    else
        ((fail_count++))
        if [ $fail_count -ge $FAIL_THRESHOLD ]; then
            echo "$(date): 网络中断,重启NetworkManager..."
            systemctl restart NetworkManager.service
            fail_count=0
            sleep $FAIL_INTERVAL
        else
            sleep $INTERVAL
        fi
    fi
done
```

赋予执行权限:

```bash
sudo chmod +x /usr/local/bin/network-restart.sh
```

### 2. 创建Systemd服务
创建文件`/etc/systemd/system/network-restart-monitor.service`,内容如下:

```ini
[Unit]
Description=Network Restart Monitor
After=network.target

[Service]
ExecStart=/usr/local/bin/network-restart.sh
Restart=always
User=root

[Install]
WantedBy=multi-user.target
```

### 3. 启用并启动服务

```bash
sudo systemctl daemon-reload
sudo systemctl enable network-restart-monitor.service
sudo systemctl start network-restart-monitor.service
```

### 4. 验证服务状态

```bash
systemctl status network-restart-monitor.service
```

### 配置说明:
- **目标调整**:修改脚本中的`TARGET`为更可靠的服务器(如你的路由器IP)。
- **阈值调整**:通过`FAIL_THRESHOLD`设置连续失败次数,避免误判。
- **日志查看**:使用`journalctl -u network-restart-monitor.service`查看服务日志。

### 注意事项:
- 确保脚本中的`systemctl`路径正确(通常为`/usr/bin/systemctl`)。
- 若企业网络有防火墙限制,建议使用内网可达地址作为检测目标。
- 频繁网络抖动可能导致服务重启次数过多,建议适当增大`FAIL_INTERVAL`。

此方案通过系统级服务实现持续监控,在保持低资源占用的同时确保网络可靠性。

你可能感兴趣的:(ubuntu,网络,linux)