Our setup is mostly Python-based, it works quite well and it has been running reliably for many years.
We currently use Jenkins to schedule the python scripts that run our rsync jobs.
Jenkins is set to run the commands like this: sudo -u mirror /home/mirror/scripts/run_mirror.py -v centos
(We need `sudo` because we don't want to have everything owned by the Jenkins user. The `sudoers` configuration allows Jenkins to run that Python script only.)
I don't particularly like relying on Jenkins (because it is bloated and huge and it requires Java), but it's what we were using before I took over the mirror and I haven't had time to replace it.
We have Jenkins send the emails with the build failure notifications because that is built in, and it also sends a "back to normal" email when the next successful build completes. It also stores a week of successful logs, just in case we need to look at them, as well as all the failure logs.
Just for completeness, I have attached a screenshot of (the top half of) the Jenkins status page.
I know there was a time in the past that we did not use Jenkins, just cron calling the Python script, so if you look around in our Python scripts you may find email notification code that can help you as well.
Moshe