问题描述
我有一个在 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 (将#修改为@)