有许多工具监控出口速度但是我还没能找到一个能提供总带宽的单一数字的方法,最好是以一种易于使用的方式,例如:
tip eth0 egress -t 100GB -c 'sudo shutdown now'
这基本上就是我想要做的:当数据超出某个限制时触发命令(比如关闭 VPS)。
由于我的使用量很大,因此使用上述任何一种工具都行不通,也无法tc
限制速度我需要限制全部的。
答案1
我尝试了一下,并为你编写了一个脚本,它可以测量你的使用情况并执行命令。它从接口获取字节,将它们相加,然后将它们转换为千兆字节(请注意,我使用 1024 而不是 1000 进行划分 - 你可以调整以使其更敏感...)
保存以下脚本,使其可执行(即,如果它只能由 root 执行,则 chmod +700 /path/to/script.name),然后添加到 Crontab。
#! /bin/bash
INTERFACE=br0
# Limit in Gigabytes
LIMIT=100
bytesin=$( cat /sys/class/net/${INTERFACE}/statistics/tx_bytes )
bytesout=$( cat /sys/class/net/${INTERFACE}/statistics/rx_bytes )
gbtotal=$((( $bytesin + $bytesout )/1024/1024/1024))
if [ $gbtotal -gt $LIMIT ]
then
echo "Execute this command"
fi
您可以通过多种方式将其添加到 crontab。一种方法是将以下内容添加到 /etc/crontab
* * * * * root /path/to/script.name
关于我的脚本的一些说明:
- 脚本快速而粗糙并且几乎没有经过测试 - 你得到了你付出的回报。
- 它假定您采取的操作将导致接口重置其字节计数器 - 例如关闭电源。
- 它并不完全准确 - 具体来说它每分钟只会从 cron 运行一次。
- 我还没有尝试过,但关闭界面然后重新启动理论上应该可以重置计数器。
- 使用风险自负。如果我做错了什么并且你执行了关机/重启,那么它可能会导致启动循环。