我的 crontab 中有一个如下所示的条目:
0 3 * * * pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
当我从 shell 执行该脚本时,该脚本运行良好,但它似乎并非每晚都在运行。我假设权限有问题,也许 crontab 正在其他用户或其他用户下运行。我该如何调试呢?我是一个共享托管环境(WebFaction)。
我的 crontab 中有一个如下所示的条目:
0 3 * * * pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
当我从 shell 执行该脚本时,该脚本运行良好,但它似乎并非每晚都在运行。我假设权限有问题,也许 crontab 正在其他用户或其他用户下运行。我该如何调试呢?我是一个共享托管环境(WebFaction)。
您需要使用反斜杠转义 crontab 条目中的“%”字符 - 请参阅 crontab(5) 联机帮助页。我遇到了完全相同的问题。
例如:
0 7 * * * mysqldump usblog | bzip2 -c > usblog.$(date --utc +\%Y-\%m-\%dT\%H-\%M-\%SZ).sql.bz2
您没有收到有关 cron 错误的电子邮件吗?即使您在 crontab 中输入“MAILTO=you@example.com”也不行?
如果 pg_dump 或 gzip 不在系统默认路径上,您可能还需要在 crontab 中设置 PATH(因此使用“type pg_dump”检查它们的位置,crontab 默认情况下通常只在 /bin 或 /usr/bin 中运行命令)
当你说它不起作用时,你是什么意思?它根本不生成文件还是为空?
如果您的系统设置正确,并且您的命令生成了任何输出,crontab 应该会向您发送一封电子邮件。
尝试这样的事情来验证 crontab 是否正在运行。它会每分钟触摸文件。
* * * * * touch /tmp/foo
并像詹姆斯提到的那样检查你的路径。
始终在 crontab 条目中使用完整路径。例如,/usr/bin/gzip
。您还需要为pg_dump
和执行此操作date
。
如果这在 /etc/crontab 之类的文件中,请确保包含用户:
0 3 * * * <user_goes_here> pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz