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" 
+0

只是让你知道 - 你可以使用'/路径/到/ ENV/python',而无需激活它运行在虚拟环境中的程序。 – Kendas

+0

是的我也试过 –

+1

你可能需要在cron脚本中设置'DJANGO_SETTINGS_MODULE' env变量或通过'--settings'将设置传递给命令。 – schwobaseggl

看来它是一个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:我还不能评论,因此我把它写在一个答案中。

+0

这里是我所拥有的调试到目前为止 –

+0

由于crontab在调试时遇到这样的问题很棘手,我首先尝试通过'''/path/to/cron.sh >> /tmp/log.out 2>&1登录文件执行“ '''。如果这不能告诉你一些信息,我有时会在python代码中记录一些日志语句来记录一些数据(你可以简单地通过写入文件或使用[logging](https://docs.python.org /2/library/logging.html)模块)。通过这种方式,你可以尝试找出是什么导致了这种意外的工作方式(或者甚至知道它是否以某种方式运行) –

+0

感谢帮助这是我正在得到无法找到包装的文件。 –

问题是,您没有使用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