How to test crontab entry?

孤者浪人 提交于 2019-12-10 21:49:28

问题


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


回答1:


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)




回答2:


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




回答3:


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.




回答4:


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


来源:https://stackoverflow.com/questions/3009759/how-to-test-crontab-entry

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!