Adi*_*tya 10 command-line bandwidth vnstat
我最近下载vnstat了监控我的互联网带宽使用情况。我的数据计划有限,但我的 ISP 在非高峰时段(凌晨 2:00 至上午 8:00)提供不限流量的带宽。因此,我希望 vnstat 报告数据使用情况,分别对高峰使用和非高峰使用进行分类。
我已经经历过,man vnstat但在这方面找不到任何帮助。是否可以使用 获得高峰和非高峰时段的两种不同统计数据vnstat?如果没有,我可以使用哪些替代方法来实现相同的目标?
AFAIK 没有带宽监控工具比vnstat. 不幸的是,它不支持此功能。但是您可以通过使用多个数据库来实现这一点vnstat。
将高峰时段的数据保存到vnstat1和非高峰时段的数据vnstat2。制作一个守护程序脚本,该脚本将使用if无限循环中的条件根据一天中的时间切换它们;如果不是在 02-08 小时之间,请使用vnstat1else disable vnstat1、enablevnstat2和sleep。
我编写了以下 bash 脚本。将其保存在一个文件中并使用sudo chmod x <filename>. 测试一段时间。最后使脚本自动启动操作系统。以root用户身份运行它。(只需添加脚本的路径即可/etc/rc.local在启动时执行)。
#!/bin/bash
# vnstat_switcher.sh
# Select the interface to monitor e.g: eth0, eth1, ppp0
i=eth0
# Location of database used by vnstat
db1='/var/lib/vnstat1' # on-peak
db2='/var/lib/vnstat2' # off-peak
onpeakdb='/tmp/onpeak'
offpeakdb='/tmp/offpeak'
debug=false
iscatdata=true
current=0
# Create database for db1 if it doesn't exist
if ! [ -d "$db1" ]
then
mkdir -p "$db1"
vnstat -i $i --dbdir "$db1" -u
fi
# Create database for db2 if it doesn't exist
if ! [ -d "$db2" ]
then
mkdir -p "$db2"
vnstat -i $i --dbdir "$db2" -u
fi
$debug && echo 1
#vnstat -i $i --disable
while true
do
t=$( date %H )
$debug && t=$( date %S )
if [ "$t" -lt 2 ] || [ "$t" -gt 7 ] # if peak hours
then
$debug && echo 'On-peak hours'
vnstat -i $i --dbdir "$db1" -u
$debug && echo 2
if [ "$iscatdata" ]
then
vnstat -i $i --dbdir "$db2" > "$offpeakdb"
iscatdata=false
fi
vnstat -i $i --dbdir "$db1" > "$onpeakdb"
if [ $current != 1 ]
then
vnstat -i $i --disable --dbdir "$db2"
$debug && echo 3
vnstat -i $i --enable --dbdir "$db1" --sync
$debug && echo 4
current=1
fi
else
$debug && echo 'Off-peak hours'
vnstat -i $i --dbdir "$db2" -u
$debug && echo 5
if [ "$iscatdata" ]
then
vnstat -i $i --dbdir "$db1" > "$onpeakdb"
iscatdata=false
fi
vnstat -i $i --dbdir "$db2" > "$offpeakdb"
if [ $current != 2 ]
then
vnstat -i $i --disable --dbdir "$db1"
$debug && echo 6
vnstat -i $i --enable --dbdir "$db2" --sync
$debug && echo 7
current=2
fi
fi
$debug && sleep 1 || sleep 1m
done
#### Notes
# Ignore this message at first execution
# Interface "lo" is already disabled.
# Interface "lo" is already enabled.
#For debugging use interface 'lo' then
# `ping -s 2222 0.0.0.0`
Run Code Online (Sandbox Code Playgroud)
将i=eth0第 5 行更改为要监视的网络接口。
要知道用法 runcat /tmp/onpeak和cat /tmp/offpeak分别。
Also it's a good idea to reset the data on the default database (/var/lib/vnstat), as it will never update if everything in the script goes well.
| 归档时间: |
|
| 查看次数: |
1549 次 |
| 最近记录: |