本文目录导读:

- Linux服务器网络检测与重启脚本
- Windows网络检测与重启脚本 (PowerShell)
- 路由器/交换机检测重启脚本 (SSH方式)
- 定时任务配置 (crontab)
- Python版本的网络监控脚本
- 使用说明
- 注意事项
我来为您提供几个不同场景下检测并重启网络设备的脚本。
Linux服务器网络检测与重启脚本
#!/bin/bash
# 网络检测与重启脚本
# 文件名: network_monitor.sh
# 配置参数
PING_TARGET="8.8.8.8" # ping测试的目标地址
PING_COUNT=3 # ping次数
LOG_FILE="/var/log/network_monitor.log"
TIMEOUT=5 # 超时时间(秒)
# 日志函数
log_message() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 检测网络连接
check_network() {
if ping -c $PING_COUNT -W $TIMEOUT $PING_TARGET > /dev/null 2>&1; then
return 0
else
return 1
fi
}
# 重启网络服务
restart_network() {
log_message "正在重启网络服务..."
# 尝试多种方式重启网络
if systemctl restart network 2>/dev/null; then
log_message "通过 systemctl 重启网络成功"
elif service networking restart 2>/dev/null; then
log_message "通过 service 重启网络成功"
elif ifdown eth0 && ifup eth0 2>/dev/null; then
log_message "通过 ifdown/ifup 重启网络成功"
else
log_message "ERROR: 网络重启失败"
return 1
fi
# 等待网络恢复
sleep 5
# 验证网络是否恢复
if check_network; then
log_message "网络已成功恢复"
return 0
else
log_message "ERROR: 网络未能恢复,需要人工干预"
return 1
fi
}
# 主循环
log_message "网络监控脚本启动"
while true; do
if check_network; then
log_message "网络连接正常"
else
log_message "警告: 网络连接异常,尝试重启..."
restart_network
fi
# 每60秒检查一次
sleep 60
done
Windows网络检测与重启脚本 (PowerShell)
# Windows网络检测与重启脚本
# 文件名: network_monitor.ps1
# 配置参数
$PingTarget = "8.8.8.8"
$LogFile = "C:\Logs\network_monitor.log"
$CheckInterval = 60 # 检查间隔(秒)
# 日志函数
function Write-Log {
param([string]$Message)
$TimeStamp = Get-Date -Format "yyyy-MM-dd HH:mm:ss"
"$TimeStamp - $Message" | Out-File -FilePath $LogFile -Append
Write-Host "$TimeStamp - $Message"
}
# 检测网络连接
function Test-Network {
try {
$result = Test-Connection -ComputerName $PingTarget -Count 2 -Quiet
return $result
}
catch {
return $false
}
}
# 重启网络适配器
function Restart-NetworkAdapter {
Write-Log "正在重启网络适配器..."
try {
# 获取网络适配器
$adapters = Get-NetAdapter | Where-Object {$_.Status -eq "Up"}
foreach ($adapter in $adapters) {
Write-Log "重启适配器: $($adapter.Name)"
Restart-NetAdapter -Name $adapter.Name -Confirm:$false
}
Write-Log "网络适配器重启完成"
Start-Sleep -Seconds 10
# 验证网络
if (Test-Network) {
Write-Log "网络已恢复"
return $true
} else {
Write-Log "警告: 网络未能自动恢复"
return $false
}
}
catch {
Write-Log "ERROR: 重启网络适配器失败: $_"
return $false
}
}
# 主循环
Write-Log "网络监控脚本启动"
while ($true) {
if (Test-Network) {
Write-Log "网络连接正常"
} else {
Write-Log "警告: 网络连接异常"
Restart-NetworkAdapter
}
Start-Sleep -Seconds $CheckInterval
}
路由器/交换机检测重启脚本 (SSH方式)
#!/bin/bash
# 路由器/交换机检测重启脚本
# 需要安装 sshpass 或配置SSH密钥
# 配置参数
ROUTER_IP="192.168.1.1"
SSH_USER="admin"
SSH_PASS="your_password" # 建议使用SSH密钥替代密码
PING_TARGET="8.8.8.8"
LOG_FILE="/var/log/router_monitor.log"
# 日志函数
log() {
echo "[$(date '+%Y-%m-%d %H:%M:%S')] $1" | tee -a "$LOG_FILE"
}
# 检测网络
check_network() {
ping -c 2 -W 3 $PING_TARGET > /dev/null 2>&1
return $?
}
# SSH执行命令
ssh_exec() {
sshpass -p "$SSH_PASS" ssh -o StrictHostKeyChecking=no -o ConnectTimeout=10 \
$SSH_USER@$ROUTER_IP "$1" 2>/dev/null
}
# 重启路由器
reboot_router() {
log "准备重启路由器 $ROUTER_IP"
# 发送重启命令 (不同厂商命令不同)
# Cisco
ssh_exec "reload"
# 华为
# ssh_exec "reboot"
# 其他品牌请根据实际情况修改
log "重启命令已发送"
# 等待路由器重启
log "等待路由器重启 (预计60秒)..."
sleep 60
# 验证网络恢复
local retry_count=0
while [ $retry_count -lt 6 ]; do
if check_network; then
log "路由器重启成功,网络已恢复"
return 0
fi
retry_count=$((retry_count + 1))
log "等待网络恢复... (第${retry_count}次尝试)"
sleep 10
done
log "ERROR: 路由器重启后网络仍未恢复"
return 1
}
# 主程序
log "开始监控网络..."
if check_network; then
log "网络连接正常"
else
log "网络连接异常,尝试重启路由器..."
reboot_router
fi
定时任务配置 (crontab)
# 每5分钟执行一次网络检测 */5 * * * * /path/to/network_monitor.sh # 或者使用更简单的检测脚本 */5 * * * * ping -c 2 8.8.8.8 > /dev/null || /sbin/service network restart
Python版本的网络监控脚本
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import time
import subprocess
import logging
from datetime import datetime
class NetworkMonitor:
def __init__(self):
self.ping_target = "8.8.8.8"
self.log_file = "/var/log/network_monitor.log"
self.setup_logging()
def setup_logging(self):
logging.basicConfig(
filename=self.log_file,
level=logging.INFO,
format='%(asctime)s - %(levelname)s - %(message)s'
)
def check_network(self):
try:
result = subprocess.run(
['ping', '-c', '2', '-W', '3', self.ping_target],
capture_output=True,
timeout=10
)
return result.returncode == 0
except:
return False
def restart_network(self):
logging.warning("网络异常,尝试重启网络服务...")
try:
# 尝试重启网络服务
commands = [
['systemctl', 'restart', 'network'],
['service', 'networking', 'restart'],
['ifdown', 'eth0'], ['ifup', 'eth0']
]
for cmd in commands:
try:
subprocess.run(cmd, check=True, timeout=30)
logging.info(f"执行命令成功: {' '.join(cmd)}")
break
except:
continue
time.sleep(10)
if self.check_network():
logging.info("网络已恢复")
return True
else:
logging.error("网络未能自动恢复")
return False
except Exception as e:
logging.error(f"重启网络失败: {str(e)}")
return False
def run(self, interval=60):
logging.info("网络监控脚本启动")
while True:
if self.check_network():
pass # 网络正常,不做操作
else:
logging.warning("检测到网络异常")
self.restart_network()
time.sleep(interval)
if __name__ == "__main__":
monitor = NetworkMonitor()
monitor.run()
使用说明
-
设置执行权限:
chmod +x network_monitor.sh
-
测试执行:
./network_monitor.sh
-
添加开机启动:
# 添加到 /etc/rc.local /path/to/network_monitor.sh &
-
配置系统服务 (systemd):
# /etc/systemd/system/network-monitor.service [Unit] Description=Network Monitor Service After=network.target [Service] Type=simple ExecStart=/path/to/network_monitor.sh Restart=always [Install] WantedBy=multi-user.target
注意事项
- 安全性:不要在脚本中硬编码密码,建议使用SSH密钥认证
- 监控频率:合理设置检查间隔,避免过于频繁
- 日志管理:定期清理日志文件,避免磁盘空间占用
- 权限问题:可能需要root权限执行网络重启操作
- 厂商差异:不同网络设备的重启命令不同,请根据实际情况修改
需要根据您的具体网络设备和环境调整脚本中的命令和参数。