A script named backup.sh in /etc/cron.daily never runs
You drop backup.sh into /etc/cron.daily, make it executable, and wait. It never runs.
Debian's cron manual explains why: those files are run by run-parts, and their names may only contain letters, digits, underscores and hyphens. "Any file containing dots will be ignored." The same naming rule applies to files in /etc/cron.d. (Debian cron(8))
The rule exists so leftover package files like .dpkg-old don't run, but it also skips your .sh file without a word.
Two quick checks:
- Rename it:
mv backup.sh backup. - Run
run-parts --test /etc/cron.dailyto list the scripts that would actually run.
Then give the job a heartbeat, so a skipped run shows up as a missing ping, not a surprise weeks later.
Watch your cron jobs, free for 3 watches.