Crontab 执行 Django 命令,但没有任何反应

Crontab 执行 Django 命令,但没有任何反应

(转载自 StackOverflow)

我已经设置了 cron 来为 ubuntu 16.04 中的 django-cron(django 1.10.5、python 3.5、anaconda 4.2.0)执行以下命令:

PATH=/user/project/projectname/website
* * * * * ./manage.py runcrons "app.crons.RunCronJob"

这是我的文件树,它位于远程站点的最高级别正下方(/):

|-- user
|   |-- project
|   |   |-- projectname
|   |   |   |-- website
|   |   |   |   |-- file.txt
|   |   |   |   |-- manage.py
|   |   |   |   |-- app (a django app)
|   |   |   |   |   |-- crons.py

RunCronJob是一个 cronjob,它会在下crons.py添加一行。当我进入目录并手动执行时,它工作正常。但是,当我设置的 cronjob 运行时,它不会将任何内容附加到我的文本文件中。我已经使用邮件服务验证了 cron 任务每分钟都在运行,但我收到的数据似乎没有告诉我它为什么不起作用的任何有用信息。file.txt/website/website./manage.py runcrons "app.crons.RunCronJob"grep cron /var/log/syslog

(python 注释:我已将os.chdir(os.path.dirname(sys.argv[0]))其添加到我的crons.py 确保文本文件写入正确的目录,无论命令从哪里运行。例如,从运行website/manage.py runcrons "app.crons.RunCronJob"/projectname我来说也是有效的。因此,我不怀疑我的问题与 django、django-cron 库或 python 有关。)

我看过一些其他答案讨论了一些 cron 的常见问题,并尽力解决了所有问题:我的 crontab 在末尾有一个换行符,我已经设置了时区(尽管这不会影响我的 cronjob),pgrep cron返回了一个数字,我已经设置了我的文本文件的权限,我已经重新启动了 cron 很多次,等等。

虽然我也尝试过正确设置环境路径,但我怀疑其中某些部分仍然不正确。我尝试了各种方法,例如/home在 前面添加/user、删除 前面的点和/或斜线manage.py,以及在命令前面添加绝对文件路径,但都无济于事。

尽管我认为我的怀疑在于我如何设置路径,但错误仍然可能出在我的项目的其他地方。我忽略了什么问题,或者我应该如何诊断它?

答案1

我找到了问题的答案,同时我也意识到这篇文章的标题实际上是不正确的:crontab 正在执行,但问题是我的 cron 脚本中的 python 命令是不是正在被处决。

原因是 crontab 执行时使用的$PATH变量与我在控制台中直接运行命令时使用的变量不同,其描述与接受的其他答案我链接了。我的错误是我完全误解了这个$PATH变量;我以为它应该指向我项目中的可执行文件,而实际上它包含解释脚本的文件夹的路径(如 Python 解释器)。所以我的脚本没有被执行,因为 cron 找不到解释器来执行它们。一个非常愚蠢的错误,如果阅读文档就可以避免!

我对 django、django-cron 或 python 完全没有问题。

摘要:cron 使用了不同的路径。添加了默认环境路径($PATH在控制台中输入以查看)。

相关内容