Unraid系统下网卡链路速率下降时自动执行脚本的实现方案咨询
Unraid系统下网卡链路速率下降时自动执行脚本的实现方案咨询
嘿,我之前帮朋友处理过类似的Unraid网卡速率波动问题,给你整理一套可行的分步方案,亲测在Unraid 6.x版本上有效:
第一步:先确认你的网卡设备名
首先得搞清楚你要监控的以太网口叫什么名字,在Unraid终端里执行:
ip link show
输出里会列出所有网络设备,比如eth0、enp3s0这类就是你的网卡名,记下来后面要用(比如下面脚本里的INTERFACE变量就填这个)。
你也可以用ethtool命令验证一下当前速率:
ethtool eth0 | grep "Speed:"
正常10GbE的话应该显示Speed: 10000Mb/s。
第二步:编写速率检测+自动修复脚本
新建一个脚本文件(比如/root/check_nic_speed.sh),把下面的内容复制进去,记得替换掉INTERFACE、HEALTHCHECKS_URL和邮件相关的参数:
#!/bin/bash # 替换成你的网卡设备名 INTERFACE="eth0" # 替换成你的healthchecks.io监测URL(如果用的话) HEALTHCHECKS_URL="https://hc-ping.com/你的UUID" # 接收通知的邮箱地址(如果用邮件的话) NOTIFY_EMAIL="your@email.com" # 获取当前网卡速率 CURRENT_SPEED=$(ethtool $INTERFACE | grep "Speed:" | awk '{print $2}') # 判断速率是否低于10GbE if [ "$CURRENT_SPEED" != "10000Mb/s" ]; then echo "网卡速率异常:当前为$CURRENT_SPEED,开始修复..." # 1. 发送通知到healthchecks.io(可选) # 这里用POST请求标记为失败,触发healthchecks的告警 curl -X POST "$HEALTHCHECKS_URL/fail" -d "网卡速率降至$CURRENT_SPEED,正在重启端口" # 2. 发送邮件通知(可选,需要Unraid配置好SMTP) echo "Unraid网卡速率异常:当前速率为$CURRENT_SPEED,已触发端口重启" | mail -s "Unraid网卡速率告警" $NOTIFY_EMAIL # 3. 重启网卡端口 ip link set $INTERFACE down sleep 2 ip link set $INTERFACE up echo "网卡端口已重启,等待重新连接..." fi
写完后给脚本加执行权限:
chmod +x /root/check_nic_speed.sh
可以手动运行一次脚本测试效果:
/root/check_nic_speed.sh
第三步:设置定时任务自动检测
Unraid用crontab来定时执行脚本,打开终端输入:
crontab -e
在打开的编辑器里添加一行(比如每5分钟检查一次,你可以根据需求调整时间):
*/5 * * * * /root/check_nic_speed.sh >> /var/log/nic_speed_check.log 2>&1
保存退出后,crontab就会自动按照设定的频率运行脚本了,日志会存在/var/log/nic_speed_check.log里,方便后续排查问题。
一些额外小贴士
- 如果Unraid自带的邮件通知已经配置好了,也可以直接调用Unraid的通知API,比自己用
mail命令更省心; - 有些高端网卡可能需要用
ethtool强制设置速率,但自动重启端口通常是最通用的解决方案; - 如果你担心重启网卡会影响正在运行的Docker容器或VM,可以在脚本里先检查有没有重要任务在运行,再执行重启(不过一般短时间的网络中断对Unraid服务影响不大)。
备注:内容来源于stack exchange,提问作者Turkeyphant




