安装 vnstat

apt install vnstat

vnstat --help

image-1716110632730

这些参数分别可以 查看 每 5分 ,小时 ,小时图形,天,月,年的使用量。

支持表格,oneline,json,xml格式。
image-1716119815771

使用gpt 写一个定时脚本,需求: 超过500MB,发邮件,超过1个G关机。

#!/usr/bin/env python3
import smtplib
from email.mime.text import MIMEText
import os, re
from datetime import datetime

# 获取当前的日期
CURRENT_DAY = datetime.now().day

# 获取vnstat产生的流量数据
TOTAL_DATA=os.popen('vnstat --oneline').read()
# 提取本月至今的总流量数值和单位
VALUE, UNIT = TOTAL_DATA.split(';')[10].split()

# 根据单位转换数据值为MiB
if UNIT == "GiB":
  VALUE = float(VALUE)*1024
elif UNIT == "KiB":
  VALUE = float(VALUE)/1024
elif UNIT == "B":
  VALUE = float(VALUE)/(1024*1024)
else:  
  VALUE = float(VALUE)

# 判断数据值是否超过阈值,并执行对应的命令
if VALUE > 500 * CURRENT_DAY:
  # 配置Outlook邮箱服务器、账号和密码
  smtp_server= 'smtp-mail.outlook.com'
  smtp_port= 587
  email_address= 'your-email@outlook.com'
  email_password= 'your-password'

  # 配置邮件内容
  recipients= ['recipient-email@example.com']
  message= MIMEText(f'Warning: Traffic has exceeded {500 * CURRENT_DAY} MiB. Current traffic is {VALUE} MiB.')
  message['Subject']= 'Traffic Warning'
  message['From']= email_address
  message['To']= ', '.join(recipients)

  # 创建SMTP对象,并配置Outlook邮箱服务器和端口
  server= smtplib.SMTP(smtp_server, smtp_port)

  # 设置STARTTLS加密
  server.starttls()

  # 登陆邮箱
  server.login(email_address, email_password)

  # 发送邮件
  server.sendmail(email_address, recipients, message.as_string())

  # 断开服务器链接
  server.quit()

if VALUE > 1024 * CURRENT_DAY:
  # 关机的命令,需要你自己配置
  os.system('shutdown -h now')

测试一下:
image-1716110430916

定时任务

*/5 * * * * /path/to/python3  monitor.sh