I have an entry in my crontab that looks like this:
0 3 * * * pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
That script works perfectly when I execute it from the shell, but it doesn’t seem to be running every night. I’m assuming there’s something wrong with the permissions, maybe crontab is running under a different user or something. How can I debug this? I’m a shared hosting environment (WebFaction).
You need to escape “%” characters in crontab entries with backslashes- see the crontab(5) manpage. I’ve had exactly the same problem.
For example:
Do you not get emails of cron errors? Not even if you put “MAILTO=you@example.com” in the crontab?
You may also need to set PATH in your crontab if pg_dump or gzip isn’t on the system default path (so use “type pg_dump” to check where they are, crontab usually only runs commands in /bin or /usr/bin by default)