从Cron.d运行Python脚本

时间:2011-10-07 15:09:36

标签: python django cron

我正在尝试通过在Ubuntu上安装到/etc/cron.d/mycron的crontab运行Django管理命令。

我首先通过将以下内容写入/etc/cron.d/mycron来测试我的基本设置:

* * * * * root command echo "Test $(date)" 2>&1 >> /tmp/mycron.log

我确认/tmp/mycron.log每分钟更新一次并包含预期的文本。

然后我使用我的实际管理命令尝试了以下变体:

* * * * * root command python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * root command /usr/bin/python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * root command /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

* * * * * /usr/bin/python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

即使生成了日志文件,它也不包含管理命令输出的预期日志文本。

每次变化后,我运行sudo touch /etc/cron.d/重新加载cron。即使我的Python代码中存在错误,我也希望记录某种错误消息。

我已经检查了tail -f /var/log/syslog,它显示的唯一错误是针对不以“root”开头的crontabs,它为我提供了错误:

Error: bad username; while reading /etc/cron.d/mycron

对于所有其他人,我看到类似的东西:

Oct  7 10:54:01 localhost CRON[27805]: (root) CMD (/path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log)

但是没有任何内容写入日志,并且我预计发生的数据库更改不会发生。我究竟做错了什么?

1 个答案:

答案 0 :(得分:3)

您需要的输出位于/tmp/mycron.log,或邮寄至root。从mail下方输入root进行检查。

另外,你为什么尝试不同的变化? crontab文件的语法是严格定义的(man crontab -S 5),对于/ etc / crontab它是:

min hour day month weekday user cmdline

对于个人crontabs,它是:

min hour day month weekday cmdline

您不能在/ etc / crontab中省略用户名,也不能使用/usr/bin/python代替用户名。

你也不需要单词command,它只能运行,因为有一个带有这个名字的内置bash函数,它显然只是从它的参数中运行一个命令。

正确的行必须是:

* * * * * root /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log
* * * * * root /usr/bin/python /path/to/my/script/manage.py mycommand 2>&1 >> /tmp/mycron.log

在第一种情况下,manage.py必须是可执行的(chmod +x manage.py),它的第一行必须是#!/usr/bin/python,或者你的python解释器路径是什么。