从 cron 运行 Django 管理命令会导致 ImportError

问题描述

我有一个在 AWS Lightsail Bitnami Apache 服务器上运行的 Django 项目,它需要定期从计划模型中抓取数据(我为此创建了一个脚本,我们称之为 script_1)。 script_1 抓取数据,对于未发现的项目,它会在预定时间通过 Linux script_2 命令运行另一个脚本 (at)。

我已将这两个脚本都设置为 Django 管理命令,因为它们都可以访问我的模型。直接从命令行 (script_1) 运行 python /opt/bitnami/path/to/manage.py script_1 效果很好。

为了自动执行此操作,我安排 script_1 作为每日 cron 作业运行。但是,它不适用于 cron。 The problem is almost identical to this question,但答案对我不起作用。我检查了 cron 作业运行时它发送的邮件输出如下:

X-Cron-Env: <SHELL=/bin/sh>
X-Cron-Env: <HOME=/home/bitnami>
X-Cron-Env: <PATH=/usr/bin:/bin>
X-Cron-Env: <LOGNAME=bitnami>
Message-Id: <[email protected]>
Date: Wed,5 May 2021 01:45:01 +0000 (UTC)

  File "/opt/bitnami/path/to/manage.py",line 17
    ) from exc
         ^
SyntaxError: invalid Syntax

这一行来自导入 ImportError 时引发的 execute_from_command_line。我根本没有更改 manage.py,请参阅下面的文件

#!/usr/bin/env python
"""Django's command-line utility for administrative tasks."""
import os
import sys


def main():
    """Run administrative tasks."""
    os.environ.setdefault('DJANGO_SETTINGS_MODULE','project.settings')
    try:
        from django.core.management import execute_from_command_line
    except ImportError as exc:
        raise ImportError(
            "Couldn't import Django. Are you sure it's installed and "
            "available on your PYTHONPATH environment variable? Did you "
            "forget to activate a virtual environment?"
        ) from exc
    execute_from_command_line(sys.argv)


if __name__ == '__main__':
    main()

在这里做错了什么?一种想法是 manage.py 以 #!/usr/bin/env python 开头,我不确定 cron 使用什么环境(但同样,从 bash shell 调用它也能正常工作)。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)