我创建了一个可执行的脚本.sh,其中包含运行django managemenet命令的代码。
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 log也显示
CRON[14768]: (root) CMD /path/to/cron.sh > /dev/null 2>&1
我正在使用bitnami django ami(ubuntu 14.04.5 LTS)
更新
删除/ dev / null后,我现在收到此错误
"Cannot locate wrapped file"
答案 0 :(得分:1)
似乎这是一个PATH问题。我不知道django是否使用必须设置的特定路径,但是由于安全原因,AFAIK crontab PATH确实受到限制。只是为了检查你是否可以在shell终端中执行以下操作:
echo $PATH
例如,您将获得完整的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:我还不能发表评论,因此我把它放在答案中。
答案 1 :(得分: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