上次给 windows 开了 tun 差点把房抵押了
cat /usr/local/bin/
traffic-guard.sh#!/usr/bin/env bash
INTERFACE="ens5" # 修改为你的网卡名称
LIMIT_GB=900 # 本月双向总流量限制( GiB ,对应 $11 )
NODE_NAME="Snell" # 👈 单独配置节点名
# MQTT 配置( EMQX )
MQTT_HOST="
mqtt.dkuu.com"
MQTT_PORT="1883"
MQTT_USER="lightsail"
MQTT_PASS="liupengfei"
MQTT_TOPIC="lightsail/${NODE_NAME}/traffic/total_gib"
NOW=$(date "+%Y-%m-%d %H:%M:%S")
LINE=$(vnstat -i "$INTERFACE" --oneline b 2>/dev/null)
[ -z "$LINE" ] && { echo "$NOW | 获取 vnstat 数据失败"; exit 1; }
TOTAL_BYTES=$(echo "$LINE" | awk -F';' '{print $11}')
[ -z "$TOTAL_BYTES" ] && { echo "$NOW | 解析流量失败"; exit 1; }
TOTAL_GB=$(awk -v b="$TOTAL_BYTES" 'BEGIN{printf "%.2f", b/1024/1024/1024}')
# MQTT 上报(保留消息),失败不影响关机逻辑
mosquitto_pub -h "$MQTT_HOST" -p "$MQTT_PORT" \
-u "$MQTT_USER" -P "$MQTT_PASS" \
-t "$MQTT_TOPIC" \
-m "$TOTAL_GB" -r 2>/dev/null || true
# 👇 使用 awk 做浮点比较
if awk "BEGIN {exit !($TOTAL_GB >= $LIMIT_GB)}"; then
echo "$NOW | 当前 ${TOTAL_GB} GiB >= 限制 ${LIMIT_GB} GiB | 超限关机"
shutdown -h now
else
echo "$NOW | 当前 ${TOTAL_GB} GiB / 限制 ${LIMIT_GB} GiB | 正常"
fi