本帖最后由 shadow350424 于 2025-5-15 18:37 编辑
最近家里网络不稳定,想着说看看有没有可以在检测到PVE无法联网的情况下自动重启的教程,偶然间在论坛中看到了一篇相关的文章,按照帖主的教程和另一个大佬回复的教程尝试了,本人对代码是完全不懂的,不知道是没设置好还是咋回事,在我那个PVE上运行有问题,无法联网时不会自动重启,最后搞不定就只好找AI帮忙写了一个脚本和教程,给AI的提出要求和AI提供的脚本如下。按照AI给的脚本已经正常运行了,测试过,断网后PVE系统会自动重启。有需要的亲们可以自行取用。因为本人对代码是完全不懂,要是有需要改进的地方还请各位大佬帮忙指正。
在Proxmox Virtual Environment系统中每5分钟检测一次网络,如果5次检测网络不通就重启PVE系统,重启后等待10分钟再检测网络是否接通。检测时使用百度网京东官网,并且需要检测到这两个网站都无法接通才算一次网络不通。这个脚本要设置为开机后自动启动。
以下是针对您的需求编写的 Proxmox VE 网络监控与自动重启脚本 及 详细使用教程,确保逻辑严谨、操作清晰。 ✅脚本功能概述 [td] 项目 | 内容 | 检测周期 | 每5分钟 | 检测目标 | 百度(www.baidu.com)+ 京东(www.jd.com) | 判定条件 | 两个网站均无法访问 才计为一次失败 | 重启机制 | 连续5次失败后重启系统 | 重启后行为 | 等待10分钟再恢复检测 | 日志记录 | 所有操作记录到 /var/log/pve_network_monitor.log | 自启动机制 | 通过 systemd 服务实现开机自启 |
📄完整脚本内容 Bash #!/bin/bash
# 配置参数
LOGFILE="/var/log/pve_network_monitor.log"
WAIT_TIME=300 # 每5分钟检测一次
REBOOT_THRESHOLD=5 # 连续失败5次触发重启
REBOOT_DELAY=600 # 重启后等待10分钟再检测
WEBSITE1="www.baidu.com"
WEBSITE2="www.jd.com"
# 日志记录函数
log() {
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1" >> "$LOGFILE"
}
# 网络检测函数(同时检测百度和京东)
check_connectivity() {
# 检测网站1(百度)
curl -A "Mozilla/5.0" -s --head http://$WEBSITE1 | grep "200 OK" > /dev/null
local status1=$?
# 检测网站2(京东)
curl -A "Mozilla/5.0" -s --head http://$WEBSITE2 | grep "200 OK" > /dev/null
local status2=$?
# 若两个网站均无法访问,返回1(失败)
if [ "$status1" -ne 0 ] && [ "$status2" -ne 0 ]; then
return 1
else
return 0
fi
}
# 初始化等待(重启后首次运行)
log "网络监控服务启动,等待10分钟缓冲期..."
sleep $REBOOT_DELAY
# 主监控循环
failure_count=0
while true; do
if check_connectivity; then
log "网络状态正常,失败计数器重置为0"
failure_count=0
else
failure_count=$((failure_count+1))
log "网络异常检测第${failure_count}/${REBOOT_THRESHOLD}次"
if [ "$failure_count" -ge "$REBOOT_THRESHOLD" ]; then
log "达到重启阈值,将在5秒后重启系统..."
sleep 5
shutdown -r now
exit 0 # 重启后脚本将重新启动
fi
fi
sleep $WAIT_TIME
done
🛠️ 使用教程(详细步骤) 🧠逻辑说明与注意事项 ✅检测逻辑
- 双重验证:同时检测百度和京东的 HTTP 响应头是否为 200 OK。
- 失败判定:只有当 两个网站均无法访问 时,才计为一次失败。
- User-Agent:添加 Mozilla/5.0 模拟浏览器访问,避免被反爬机制拦截。
⚠️ 注意事项
- 依赖项 确保系统已安装 curl,否则脚本无法运行。
- 权限问题 由于脚本中使用了 shutdown -r now 重启命令,必须以 root 用户运行,确保 systemd 服务配置中 User=root。
- 日志分析建议 建议定期查看日志 /var/log/pve_network_monitor.log,确认检测逻辑是否稳定运行。
- 网络隔离测试 可通过以下命令模拟网络中断测试脚本行为:
Bash # 禁用网络接口(如 eth0) ifconfig eth0 down
# 恢复网络 ifconfig eth0 up
- 重启后行为 脚本在重启后会等待10分钟再开始检测,避免因网络接口未完全初始化而误判。
✅总结 通过此脚本,您的 Proxmox VE 系统将具备 双重验证 的网络健康检查能力,仅当百度和京东均无法访问时才触发系统重启。脚本已设置为开机自启,适用于软路由、虚拟化集群等场景。 如需进一步扩展(如支持邮件通知、多网卡检测),可在此基础上添加功能。
|