FWIW: I don't use the grabber directly, but enable the "xmltv sock" option in Tvheadend grabbers.
Then I have a system crontab (man crontab) to run a script that does something similar to:
#! /bin/sh
cd .xmltv || exit 1
for i in *.xml
do
OF=/tmp/grab$i
rm -f $OF
tv_grab_az_sdjson_sqlite --output $OF --merge-split=5 ...etc
wait
nc -w 5 -U $HOME/.hts/tvheadend/epggrab/xmltv.sock < $OF &
done
wait
So that basically goes through all the files named ".xml" in your .xmltv directory, does a grab, sends the output to tvheadend, then waits for them to all finish. (Assumes your xmltv filenames don't have spaces in them).
That way you can combine data from multiple fetches and if two SD lineups have the same channels then they just overwrite each other in tvheadend.
You'd probably have to fixup paths (such as where xmltv.sock is).
My actual grabber script is a bit more complicated since I use "channel-regex" and "channel-exclude-regex" options to only fetch multiple days for "interesting" channels and just a day for the other channels and do a few other things; but you get the gist.
So your crontab would be something like:
30 07 * * * tvheadend /usr/local/bin/my_grab_schedule > /dev/null 2>&1
Which says at 7:30am run as user "tvheadend" the script and ignore output.
Again, you'd probably have to change the user and path depending on your system since unfortunately loads of installs do things in weird ways, but it gives you an idea if you do decide to go down that route.