Hopefully this helps a bit.
So I am going to give you a program I wrote, because I was having problems with cron working. I don't know shell scripting unfortunately so this is in python, but it worked for me, and it is pretty simple, but nice. Sorry I didn't comment my code, but I really didn't want to go back through it. I know some parts might not be the best, but it works.
from subprocess import call
while interface==" ":
Enter your interface:
(Be careful there is no error checking for this part)
Examples are eth0, wlan0...
if interface == "":
if x== "done":
if x== "y":
How would you like your output?
Type (From vnstat --longhelp):
q, --query query database
h, --hours show hours
d, --days show days
m, --months show months
w, --weeks show weeks
t, --top10 show top10
s, --short use short output
call(["vnstat", "-"+str(user_exit), "-i", str(interface),])
tim3= time.strftime("%H %M")
ui = inputs()
start_hour=(input("Enter the starting hour (24hr): "))
start_min=(input("Enter the starting minute: "))
x = checker(start_hour, start_min)
endh=(input("How many hours would you like to run? "))
endm=(input("How many minutes would you like to run? "))
y = checker(endh,endm)
if str(y) == "Great":
return [start_hour, start_min, endh, endm]
if h =="":
if len(str(h))> 2:
if m =="":
for x in str(h):
if x.isdigit() == False:
for y in str(m):
if y.isdigit() == False:
from subprocess import call
if str(h1)==str(s1) and str(m2)==str(s2):
call (["vnstat", "-i",str(I)])
question=input("Would you like to show a report? (y/n) ")
if question == "y" or question == "n":
Open up Idle, copy>paste.
Run it with Python 3 (python3 filename.py`).
Put in the hour you want to schedule for vnstat to run.
Put in the minute you want of that hour.
Put the amount of hours you want it to monitor for.
Put the amount of minutes you want it to monitor for.
Enter the device you are monitoring (I didn't go through and error check, so if you enter something like monkeybutt, it will try and run
vnstat -i monkeybutt, every 15 seconds, just Ctrl+C out).
The program will run through every 15 seconds to see if the time matches, it won't give any messages. It's meant to be run in the background.
Once it starts, it will take a shot every 15 seconds of the network, on the device you chose. Using the vnstat command, plus a counter saying how many seconds you have left of monitoring.
After completing the scans it will ask if you want to exit, and give you an option if you want to show a report, otherwise you can just exit. All of the stuff is stored in vnstats database anyways.
Old part of post (may be helpful to some people)
You could get gnome-schedule, then put in your command for example vnstat -h, and set it reoccurring during times you are trying to monitor. Maybe too simple, but hopefully someone else could expand further.
Additional(Edit): I have not used vnstat very much, which is why I was hoping someone could expand on that part, but with the gnome-schedule, you can schedule a command to execute during specific parts of the day. So using vntstat -tr -l (traffic switch, monitor live traffic), would show the traffic while running (which you can schedule in gnome-schedule, but you may have to manually Ctrl+C] out.)
Otherwise I am sure you could pipe this into a file, or use the graphical output program for vnstat if you have that. Graphical output program is
vnstati -i 'filename' will output it to png file. If you want further commands
vnstat --longhelp has more commands.
(Sample screen of how to put things into gnome-schedule.)
Do you know how to get a 'snapshot' of the bandwidth using vnstat already, or do you need further help on those commands? I can try to work with the program more.