【问题标题】:manage.py command in crontab not workingcrontab 中的 manage.py 命令不起作用
【发布时间】:2017-05-31 06:39:53
【问题描述】:

我创建了一个可执行脚本 .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 日志也显示

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/to/env/python 在该虚拟环境中运行您的程序,而无需激活它。
  • 是的,我也试过了
  • 您可能需要在 cron 脚本中设置 DJANGO_SETTINGS_MODULE 环境变量,或者通过 --settings 将设置传递给命令。
  • 删除重定向到/dev/null 以查看manage.py命令输出的错误。
  • 请注意,当我像 $ /path/to/cron.sh 这样直接从终端执行它时,它可以正常工作

标签: python django ubuntu bitnami


【解决方案1】:

看来是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:我还不能制作 cmets,因此我把它放在答案中。

【讨论】:

  • 这是我目前调试的内容
  • 当我遇到此类问题时,由于 crontab 很难调试,所以我首先尝试登录到由/path/to/cron.sh >> /tmp/log.out 2>&1 执行的文件。如果这没有向您透露一些信息,我有时会在 python 代码中创建一些日志语句来记录一些数据(您可以简单地通过写入文件或使用logging 模块来完成)。通过这种方式,您可以尝试找出导致这种意想不到的工作方式的原因(甚至知道它是否以某种方式运行)
  • 感谢您的帮助,这就是我得到的 无法找到包装的文件。
  • 您好@RizwanMumtaz,我不是 Django 专家,但这似乎是堆栈环境问题。检查此this answer 可能很有用。更具体地说Cannot locate wrapped file issue.
【解决方案2】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-04-14
    • 1970-01-01
    • 2019-09-10
    • 1970-01-01
    • 2018-02-11
    • 2020-02-12
    • 2019-10-12
    相关资源
    最近更新 更多