由于权限问题,Django-chronograph脚本不能从cron job或手动运行



我在通常的位置创建了一个自定义管理命令作为py文件。

计时码表安装在正确的位置并且同步无误。

我已经创建了如下的cron作业

* * * * * /home/shofty/virtualenvs/webbricks/bin/chronograph -e /home/shofty/virtualenvs/webbricks/bin/activate_this.py -p /home/shofty/virtualenvs/webbricks/website

我也尝试了以下内容,因为我认为它可能是正确的,但不是文档中的内容

* * * * * /home/shofty/virtualenvs/webbricks/bin/chronograph -e /home/shofty/virtualenvs/webbricks/bin/activate_this.py -p /home/shofty/virtualenvs/webbricks/website/manage.py cron

我已经添加了manage.py cron,因为它是用来告诉计时函数查找需要运行的作业的。如果我在我的虚拟环境中,我运行manage.py cron,它工作,作业运行。

两个作业都运行失败,但是当我尝试以su或我的用户的身份手动运行它们时,由于权限被拒绝,它们失败了。不知道他们指的是什么许可。有人以前遇到过这个吗?

答案是chronograph.sh已经被chronograph取代了。尽管这据称能够激活一个env,但它没有足够早地导入argparse,据我所知,argparse不是内置在python 2.5中,但在2.6中。然后,只需为计时脚本获得正确的参数组合,作为参考,它是-p和-e,而不是-s。

我还必须以root身份运行脚本,但目标是用户虚拟环境中的脚本。

最后,我还必须将packages目录的站点路径添加到chronograph脚本中,因为它无法找到argparse,除非我这样做。

您可能会发现这在文件权限问题上很方便。文件权限基础

您是否尝试以适当的用户/服务运行cron作业?

要编辑其他Linux用户的crontab条目,请登录到root用户,使用-u {username} -e,如下所示。

root@dev-db# crontab -u otheruser -e
@monthly /home/otheruser/fedora/bin/monthly-backup
00 09-18 * * * /home/otheruser/ubuntu/bin/check-db-status

当您使用虚拟环境时:包括一个名为chronograph.sh的脚本。复制此文件到你的项目目录

cp chronograph.sh ~/virtualenvs/webbricks/chronograph.sh

您需要打开此脚本并修改虚拟环境activate的路径脚本::

$PROJECT_PATH"/home/shofty/virtualenvs/webbricks/bin/activate"

确保这个文件是可执行的,然后更新你的crontab来执行脚本。

chmod a-x chronograph.sh

:crontab - e

* * * * * /home/shofty/virtualenvs/webbricks/chronograph.sh /home/shofty/virtualenvs/webbricks/website

确保将/path/to/your/project作为第一个参数传递给脚本。这将确保cron在查找项目目录时不会遇到问题。

是os权限被拒绝还是收到403?如果是403,我认为很可能是Django的CSRF保护造成的。如果您的脚本发送到一个特定的视图,请确保将其标记为csrf_exempt

如果权限被拒绝是在文件系统/操作系统级别,那么我真的不知道。

最新更新