#参考:https://www.freedidi.com/11185.html
#安装依赖
sudo apt install vnstat bc -y
#修改配置文件
sudo nano /etc/vnstat.conf
Interface "ens5"
# 使用GB为单位
UnitMode 1
# 每月起始日期
MonthRotate 1
#重启
sudo systemctl restart vnstat
#!/bin/bash
# 使用echo命令将修正后的脚本内容写入check.sh文件
echo '#!/bin/bash
# 网卡名称
interface_name="ens5"
# 流量阈值上限 (GB)
traffic_limit=900
# 输出日志:开始更新流量数据
echo "正在更新接口 $interface_name 的网络流量数据..."
# 更新网卡流量记录
vnstat -i "$interface_name"
# 输出日志:流量数据更新完成
echo "网络流量数据已更新。"
# 获取每月总用量(进站+出站流量,单位可能是KB、MB、GB)
ax=$(vnstat --oneline -i "$interface_name" | awk -F ";" "{print \$11}")
# 输出检测到的流量
echo "检测到的月总流量为:$ax"
# 检查流量单位并进行相应转换
if [[ "$ax" == *GB* ]]; then
used_traffic=$(echo "$ax" | sed "s/ GB//g")
elif [[ "$ax" == *MB* ]]; then
used_traffic=$(echo "$ax" | sed "s/ MB//g")
used_traffic=$(echo "$used_traffic / 1024" | bc -l) # 将MB转换为GB
elif [[ "$ax" == *KB* ]]; then
used_traffic=$(echo "$ax" | sed "s/ KB//g")
used_traffic=$(echo "$used_traffic / 1024 / 1024" | bc -l) # 将KB转换为GB
else
echo "无法识别的流量单位,脚本结束。"
exit 1
fi
# 输出当前已用流量(以GB为单位)
echo "当前已用流量:$used_traffic GB"
# 计算剩余流量
remaining_traffic=$(echo "$traffic_limit - $used_traffic" | bc -l)
# 输出已用和剩余流量
echo "流量上限为:$traffic_limit GB"
echo "剩余可用流量:$remaining_traffic GB"
# 如果流量使用超出阈值,则执行关机操作
if (( $(echo "$used_traffic >= $traffic_limit" | bc -l) )); then
echo "流量已超出 $traffic_limit GB,系统将关机。"
/usr/sbin/shutdown -h now
else
echo "流量未超出 $traffic_limit GB,系统不会关机。"
fi' > check.sh
# 添加可执行权限
chmod +x check.sh
#添加定时任务
crontab -e
*/5 * * * * /bin/bash /root/check.sh > /tmp/cron_shutdown_debug.log 2>&1
#查看日志
cat /tmp/cron_shutdown_debug.log