If I'm ever worried about one cronjob starting before another is finished, I usually create a temporary file under
/tmp/lockFile_$$) that gets removed as the last step in the first cronjob and just have the second cronjob start with a loop on that files existence, sleeping 5-10 seconds in each loop and breaking out of the loop once the file disappears (possibly sending root an email every so many iterations so you have an easier time noticing stalled jobs).
If the choking point on the first one is network bandwidth, you may try to play around with the
--compress-level options to rsync.
If the choke point is CPU, you may try giving the rsync process a lower nice value
iowait time, you might consider either
ionice if you're using cfq on Linux, or splitting the rsync command into several concurrent processes so that one process can be waiting on I/O while another is transmitting instead of going in serial. Most platforms also let you tune I/O functionality. On Linux, during the first cronjob you might consider temporarily switching to the
deadline scheduler (to prioritize reads over writes) and temporarily increasing the
read_ahead_kb since you're pulling in whole large files from disk.