crontab中的manage.py命令不起作用
我创建了一个可执行的脚本.sh,其中包含运行django managemenet命令的代码。crontab中的manage.py命令不起作用
cron.sh
#!/bin/sh
. /path/to/env/activate
cd /path/to/project
/path/to/env/bin/python manage.py some_command
我可以证实这个剧本和manage.py命令直接执行它在终端
工作$ /path/to/cron.sh
当我这样做通过crontab它没有按预期工作。
**我在做什么错?我可以确认crontab没有问题,它执行cron.sh文件,但是path/to/env/bin/python manage.py some_command未按预期工作。
cron的日志也显示出
CRON[14768]: (root) CMD /path/to/cron.sh > /dev/null 2>&1
我使用bitnami Django的AMI(Ubuntu的LTS 14.04.5)
更新
删除的/ dev后/空我得到这个错误现在
"Cannot locate wrapped file"
看来它是一个PATH问题。我不知道django是否使用了必须设置的特定路径,但由于安全原因,AFAIK crontab PATH确实非常有限。只是为了检查,如果这是你可以在一个shell终端做的问题如下:
echo $PATH
您将获得例如一个完整的路径:
/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
在crontab,把它的代码上面:
PATH=/usr/local/sbin:/usr/local/bin:/usr/bin:/usr/lib/jvm/default/bin:/usr/bin/site_perl:/usr/bin/vendor_perl:/usr/bin/core_perl
告诉我如果这有效。如果确实如此,请尝试清除提供的PATH,或者甚至在代码中提供绝对位置。
我不得不说,我不知道你是否可以在这样的cron中执行cd
。我总是使用绝对路径或cd /some/dir && /path/to/script args
。
P.S:我还不能评论,因此我把它写在一个答案中。
这里是我所拥有的调试到目前为止 –
由于crontab在调试时遇到这样的问题很棘手,我首先尝试通过'''/path/to/cron.sh >> /tmp/log.out 2>&1登录文件执行“ '''。如果这不能告诉你一些信息,我有时会在python代码中记录一些日志语句来记录一些数据(你可以简单地通过写入文件或使用[logging](https://docs.python.org /2/library/logging.html)模块)。通过这种方式,你可以尝试找出是什么导致了这种意外的工作方式(或者甚至知道它是否以某种方式运行) –
感谢帮助这是我正在得到无法找到包装的文件。 –
问题是,您没有使用Bitnami用来加载所有环境变量的脚本(/opt/bitnami/scritps/setenv.sh)。
我会尝试使用这个脚本:
#!/bin/sh
. /opt/bitnami/scritps/setenv.sh
. /path/to/env/activate
cd /path/to/project
/path/to/env/bin/python manage.py some_command
只是让你知道 - 你可以使用'/路径/到/ ENV/python',而无需激活它运行在虚拟环境中的程序。 – Kendas
是的我也试过 –
你可能需要在cron脚本中设置'DJANGO_SETTINGS_MODULE' env变量或通过'--settings'将设置传递给命令。 – schwobaseggl