【问题标题】:Error in manage.py script when running cron job for django inside docker container在 docker 容器内为 django 运行 cron 作业时,manage.py 脚本出错
【发布时间】:2023-04-09 09:04:01
【问题描述】:

我有一个运行 django 应用程序的 docker 容器,该应用程序也在其中运行一个 cron 作业。由于此错误,托管命令不断失败:

manage.py 中的第 14 行

line 14
) from exc
     ^
SyntaxError: invalid syntax

我的 cron 任务如下所示:

0 1 * * 1-5 python manage.py myCommand

我尝试将其更改为这个,看看是否可以解决问题:

0 1 * * 1-5 /usr/local/bin/python /absolute/path/to/project/manage.py myCommand

【问题讨论】:

  • 在我看来安装没有意识到 Django?
  • 我手动运行了命令(以交互方式进入容器)并且运行良好。 Django 安装在容器中。我只是不明白为什么它不能在 cron 下运行。
  • 无效语法来自 Python 2。您使用的 Django 版本需要 Python 3。更改您的 cron 命令,使其使用 Python 3。如果您使用虚拟环境,请使用 Python来自虚拟环境。
  • 看起来你的容器也有 Python 2,Python 3.5 不会给出语法错误。

标签: python django docker cron


【解决方案1】:

这是您在使用错误的 Python 版本时遇到的典型错误。按照您在问题下的评论:

docker 容器使用的是 python 3.5。当我运行 python -V 时,我得到 Python 3.5.6

您可以看到 您的用户的$PATH 在使用 shell 会话时指向 Python 3.5.6您打开。关于 cron 作业有一件事情经常让人们陷入困境:cron 打开一个不同的 shell 并且无法访问您的 $PATH。因此,在您的情况下,它指向 Python 2.x。

有很多方法可以克服这个问题。可能最简单的方法是通过运行来检查 Python 3 的位置

$ which python3

并在您的 cron 命令中使用输出中的路径。例如,对于我的系统,它将是:

0 1 * * 1-5 /usr/bin/python3 manage.py myCommand

【讨论】:

  • 明白了。非常感谢您指出这一点。非常感谢。
猜你喜欢
  • 2020-12-04
  • 2014-11-22
  • 2018-12-27
  • 2015-12-28
  • 2016-06-13
  • 1970-01-01
  • 2016-08-29
  • 2016-09-24
相关资源
最近更新 更多