从Cron.d运行Python脚本

2024-04-25 22:25:24 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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

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

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

^{pr2}$

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

在每个变体之后,我运行sudo touch /etc/cron.d/来重新加载cron。即使我的Python代码中有错误,我也希望记录一些错误消息。在

我已经检查了tail -f /var/log/syslog,它显示的唯一错误是那些不以“root”开头的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)

但是日志中没有写入任何内容,我希望发生的数据库更改也没有发生。我做错什么了?在


Tags: django文本命令echologubuntu错误etc
1条回答
网友
1楼 · 发布于 2024-04-25 22:25:24

您需要的输出要么在/tmp/mycron.log中,要么邮寄到root。在root下键入mail进行检查。在

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

min hour day month weekday user cmdline

对于个人crontab,它是:

^{pr2}$

不能在/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解释器路径是什么。在

相关问题 更多 >