CentOS下利用vnstat实现超出流量自动关机

1、安装

yum install -y epel-release
yum install vnstat -y

2、初始化:指定统计网卡 eth0,具体哪个可通过 ifconfig 查看

vnstat -i eth0 -u

3、编辑配置文件

vim /etc/vnstat.conf

Interface "eth0"  #设置默认网络接口 
DaemonUser "root"  #指定后台运行的用户和组
DaemonGroup "root" 

4、编辑服务文件

vim /usr/lib/systemd/system/vnstat.service

[Service]
User=root #只需要修改此项即可

5、启动服务

vnstatd -d   #启动后台监控
service vnstat start   #启动服务
chkconfig vnstat on  #设置开机运行

6、实现自动关机脚本

#coding=utf-8

limit_total=0# limit_total 上传+下载的流量限制,单位GB,如果不限制就是0,如果限制1T就是1024
limit_in=0# limit_in 下载的流量限制,单位GB,如果不限制就是0,如果限制1T就是1024
limit_out=0# limit_out 上传的流量限制,单位GB,如果不限制就是0,如果限制1T就是1024
sleep=60#多久检查一次,单位是秒


import os
import time
NET_IN = 0
NET_OUT = 0

while True:
    vnstat=os.popen('vnstat --dumpdb').readlines()
    for line in vnstat:
        if line[0:4] == "m;0;":
            mdata=line.split(";")
            NET_IN=int(mdata[3])/1024
            NET_OUT=int(mdata[4])/1024
            break

    killssr="`ps aux|grep server.py|awk '{print \"kill \"$2}'`"
    if (limit_total != 0 and (NET_IN+NET_OUT)>=limit_total):
        os.system(killssr)
        break
    elif (limit_in != 0 and NET_IN>=limit_in):
        os.system(killssr)
        break
    elif (limit_out != 0 and NET_OUT>=limit_out):
        os.system(killssr)
        break

    time.sleep(sleep)

脚本来源91yun

7、运行代码

nohup python limit_net_kill_ssr.py &
  • vnstat操作
vnstat -h
vnstat -d
vnstat -w
vnstat -m