Question

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).

Was it helpful?

Solution

You need to escape "%" characters in crontab entries with backslashes- see the crontab(5) manpage. I've had exactly the same problem.

For example:

0 7 * * * mysqldump usblog | bzip2 -c > usblog.$(date --utc +\%Y-\%m-\%dT\%H-\%M-\%SZ).sql.bz2

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)

OTHER TIPS

Always use full paths in crontab entrties. For example, /usr/bin/gzip. You will also need to do that for pg_dump and date.

When you say it doesn't work, what do you mean? Does it not generate the file at all or is it empty?

If your system is set up correctly, crontab should send you an email if your command generated any output.

Try something like this to verify crontab is running. It will touch the file every minute.

* * * * * touch /tmp/foo

And check your paths like James mentioned.

If this is in something like /etc/crontab, make sure the user is included:

0 3 * * * <user_goes_here> pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top