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`。
此方案通过系统级服务实现持续监控,在保持低资源占用的同时确保网络可靠性。