【问题标题】:Cron not working on Amazon Elastic Beanstalk with Python and PostgreSQLCron 无法使用 Python 和 PostgreSQL 在 Amazon Elastic Beanstalk 上工作
【发布时间】:2016-11-18 00:14:26
【问题描述】:

我已经构建了一个简单的 Django 应用程序并成功地将其部署到 Beanstalk。该应用程序在 RDS 实例上使用 PostgreSQL 后端。通过浏览器,我可以成功访问管理员并在其中创建和删除模型。但是,我也在尝试运行一个更新数据库的 cron。我在服务器上安装了 cron,但它不起作用。于是,我又跑了进去,手动运行命令并得到以下错误:服务器是否在主机“127.0.0.1”上运行并接受端口 5432 上的 TCP/IP 连接?

根据我的谷歌搜索,我猜这与安全组、允许的主机或 JDBC 有关。也许允许 Beanstalk 的 EC2 实例和 RDS 实例相互交互。但我迷路了。我尝试了来自AWS tutorial 的说明。

作为记录,cron 运行的脚本在本地以python manage.py runscript scrape 运行时运行良好。

其他内容: The tutorial I followed for deploying my appThe tutorial I followed for the cron

Cron

* * * * * /opt/python/run/venv/bin/python3.4 /opt/python/current/app/manage.py runscript scrape

settings.py 的数据库部分

if 'RDS_DB_NAME' in os.environ:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': os.environ['RDS_DB_NAME'],
            'USER': os.environ['RDS_USERNAME'],
            'PASSWORD': os.environ['RDS_PASSWORD'],
            'HOST': os.environ['RDS_HOSTNAME'],
            'PORT': os.environ['RDS_PORT'],
        }
    }
else:
    DATABASES = {
        'default': {
            'ENGINE': 'django.db.backends.postgresql_psycopg2',
            'NAME': 'db',
            'USER': 'user',
            'PASSWORD': 'password',
            'HOST': '127.0.0.1',
            'PORT': '',
        }
    }

【问题讨论】:

  • 只需在 cron 中使用“python3”而不是“python3.4”,然后检查它是否运行
  • 我还注意到另一个错误:KeyError: 'RDS_DB_NAME'。看起来环境变量可能出于某种原因未定义。
  • python3 仍然导致错误
  • 检查下面是如何使用 cron 作业运行 python

标签: python django postgresql amazon-web-services amazon-elastic-beanstalk


【解决方案1】:

这是运行 python 脚本的方式。

这是一个关于 cron 的问题。 首先是在你的 python 脚本之上添加一个 SHEBANG 行。

#!/usr/bin/env python3

使用chmod +x 使您的脚本可执行

然后执行 crontab -e 并添加 0 0 */2 * * /path/to/your/pythonscript.py

【讨论】:

    【解决方案2】:

    我很笨。我忘了在 AWS 控制台中实际设置环境变量。我能说什么,这是漫长的一天。

    【讨论】:

    • 您最好将它们设置为您的 ~/.bashrc 中的导出,这样您就不必一直重新实例化它们,例如 export RDS_DB_NAME='yourdbname'。还检查 pg_hba.conf 中设置为信任的对等点并重新启动 service postgresql restart 可能会有所帮助。
    猜你喜欢
    • 2020-07-23
    • 2014-06-07
    • 2020-01-27
    • 2012-05-15
    • 2015-02-21
    • 2023-03-31
    • 2017-11-08
    • 2016-11-25
    • 2015-04-10
    相关资源
    最近更新 更多