How to test crontab entry?
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:
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)
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
精彩评论