2011-10-07 151 views
0

我试图通过在Ubuntu上安装到/etc/cron.d/mycron的crontab运行Django管理命令。从Cron.d运行Python脚本

我第一次测试我的基本设置通过编写以下到/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,它显示的唯一错误是不以“根”开始的crontab中,它给我的错误:

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) 

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

回答

3

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

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

min hour day month weekday user cmdline 

个人的crontab,它是:

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解释器路径。

+0

您是否看了我的文章?我说我没有在syslog或/tmp/mycron.log中看到错误。 – Cerin

+0

@Cerin在问题中没有关于在/tmp/mycron.log里面寻找的东西。请更新它以更清楚您的问题。 – hamstergene

+0

@Cerin看到我更新的答案。输出可能被邮寄;运行'mail'来检查。 – hamstergene