代码之家  ›  专栏  ›  技术社区  ›  mpen

如何测试crontab条目?

  •  3
  • mpen  · 技术社区  · 15 年前

    我的crontab中有一个条目,如下所示:

    0 3 * * * pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz
    

    当我从shell执行该脚本时,该脚本工作得很好,但似乎不是每晚都在运行。我假设权限有问题,可能crontab是在另一个用户或其他用户下运行的。我如何调试这个?我是一个共享的托管环境(网络派系)。

    4 回复  |  直到 9 年前
        1
  •  9
  •   araqnid    15 年前

    您需要用反斜杠转义crontab条目中的“%”字符-请参阅crontab(5)手册页。我也有同样的问题。

    例如:

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

    你没有收到cron错误的电子邮件吗?即使你把“mailto=you@example.com”放在crontab里也不行?

    如果pg_dump或gzip不在系统默认路径上,您可能还需要在crontab中设置路径(因此,使用“type pg_dump”检查它们的位置,crontab通常只在/bin或/usr/bin中运行命令(默认情况下)。

        2
  •  2
  •   James    15 年前

    始终在crontab entries中使用完整路径。例如, /usr/bin/gzip . 你也需要这样做 pg_dump date .

        3
  •  2
  •   JayM    15 年前

    当你说不起作用时,你是什么意思?它是否根本不生成文件,或者文件是空的?

    如果系统设置正确,crontab应该在命令生成任何输出时向您发送电子邮件。

    尝试类似的操作来验证crontab是否正在运行。它每分钟都会碰到文件。

    * * * * * touch /tmp/foo
    

    像詹姆斯提到的那样检查你的道路。

        4
  •  1
  •   Glen Solsberry    15 年前

    如果这是在/etc/crontab之类的内容中,请确保包含用户:

    0 3 * * * <user_goes_here> pg_dump mydb | gzip > ~/backup/db/$(date +%Y-%m-%d).psql.gz