Cron 作业无声无息地失败

sat*_*ace 5 python cron

我有一个想要通过 crontab 运行的 python 脚本。我的 crontab 看起来像这样:

5,20,35,50 * * * * /var/www/django-apps/callreport/util.py
Run Code Online (Sandbox Code Playgroud)

该脚本设置为解析一堆平面文件并将信息粘贴到 MySQL 数据库中,然后删除这些文件。它从命令行运行良好,数据被复制到数据库,平面文件被删除。但是当设置为作为 cron 作业运行时没有任何反应。

过去,当 cron 作业失败时,我会收到一封邮件消息,但我没有收到任何有关此邮件的反馈,而且我仍然感觉自己是这个盒子的系统管理员。我究竟做错了什么?

Jon*_*ler 10

“cron”作业的常见问题是它们的环境为零——不像“at”作业那样复制你的环境。当某些东西从命令行而不是从“cron”运行时,我的经验是“环境”是最常见的问题之一。有时您会遇到另一个问题 - 'cron' 作业不是在终端上运行的,有时程序会对此感到不安。然而,与环境问题的 99% 相比,这在 1% 的范围内。

我使用的另一个关键技术是始终从“cron”运行 shell 脚本;该环境中的shell脚本,确保正确设置,然后运行真正的程序。如果“cron”工作给我带来了问题,我可以调整脚本以执行如下有用的操作:

{
    date
    env | sort
    set -x
    ...what was there before adding the debug...
} >/tmp/cron.jobname.$$ 2>&1
Run Code Online (Sandbox Code Playgroud)

这会将所有输出 - 标准输出和标准错误 - 重定向到文件名。如果您更喜欢进程 ID,则可以在文件名中构建时间戳。分析日志文件通常会迅速发现问题。