Ezequiel Garzon
Ezequiel Garzon

Ezequiel Garzon

Using vnstat to shut down a server when a bandwidth limit is reached

Ezequiel Garzon's photo
Ezequiel Garzon
·Aug 15, 2021·

I have a very strong preferences about services, whatever its kind, that provide some sort of spending limit. For that reason I prefer Vultr over DigitalOcean, but I wanted to use a marketplace app available in DigitalOcean and not in Vultr. Yes, I know in a true business pulling the plug is not an option, but for my projects it's acceptable, though I would be shocked if I reached 1000GB of bandwidth usage over a month.

Enter vnstat, a wonderful tool that updates the usage every five minutes based on kernel information, without packet sniffing. On my Ubuntu VPS I installed it:

apt install vnstat

Then I created a the following script as /root/bwcheck.sh:

export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin
[ $(vnstat --oneline | cut -d \; -f 11 | sed '/[kKM]iB/s,.*,0,;s,\..*,,') -gt 910 ] && poweroff

The first sed substitution replaces MiB by 0, since in my case I started caring with GiB. Just in case I also did the same for KiB and kiB, I haven't seen them in the wild. More than 910GiB of bandwidth usage should pull the plug in a five-minute window, just don't become a trending topic during those five minutes!

The PATH is a has some unnecessary values, but they come in the right order and admittedly it was a copy/paste operation. This file must be made executable

chmod +x /root/bwcheck.sh

Finally, I added the following to the crontab file with crontab -e:

*/5 * * * * /root/bwcheck.sh

As usual, use this at your own risk, it's not very elegant to just shut down if it's a real business, and so on. Cheers!

Share this