Skip to content
← Blog

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:

  1. Rename it: mv backup.sh backup.
  2. Run run-parts --test /etc/cron.daily to 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.