我创建了一个可执行脚本 .sh,其中包含运行 django managemenet 命令的代码。
定时任务
#!/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 14.04.5 LTS)
更新
删除/dev/null 后我现在收到这个错误
"Cannot locate wrapped file"
最佳答案
看来是PATH的问题。我不知道 django 是否使用必须设置的特定路径,但据我所知,由于安全原因,crontab PATH 确实受到限制。只是为了检查这是否是您可以在 shell 终端中执行以下操作的问题:
回显 $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:我还不能发表评论,因此我把它放在了答案中。
关于python - crontab 中的 manage.py 命令不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44277422/