如何在 Elastic Beanstalk 上启动时运行一次 python 脚本

Posted

技术标签:

【中文标题】如何在 Elastic Beanstalk 上启动时运行一次 python 脚本【英文标题】:How do I run a python script once at startup on Elastic Beanstalk 【发布时间】:2017-03-15 07:49:48 【问题描述】:

我想在 EB 实例上“无限期地”运行 python 脚本,一旦部署就会​​自动运行(我不想通过 SSH 进入)。为此,我认为我应该运行

source /opt/python/run/venv/bin/activate && nohup python myscriptname.py &

部署 Elastic Beanstalk 实例之后。但是我在哪里放上面的命令来自动运行这个后期部署呢?

我查看了How do I install a Python script on Amazon's Elastic Beanstalk?,但我认为 cron 工作不适合我。

我之前使用过container_commands,但它们似乎运行预部署。

容器命令在应用程序和 Web 服务器设置完成并且应用程序版本存档被提取之后,但在应用程序版本部署之前运行。

如何运行部署后脚本?

【问题讨论】:

【参考方案1】:

与往常一样,在 AWS 中有几种方法可以做到这一点。您可以启动一个实例,自定义,然后从此映像创建一个 AMI。然后你可以告诉 beanstalk 使用这个custom AMI

或者可以使用ebextensions 在创建和应用重启时自定义您的实例。我目前正在使用它来安装(如果尚未安装)logstash 并在我的应用启动时下载最新的 GeoLiteCity db。

这是来自文档的示例

container_commands:
  collectstatic:
    command: "django-admin.py collectstatic --noinput"
  01syncdb:
    command: "django-admin.py syncdb --noinput"
    leader_only: true
  02migrate:
    command: "django-admin.py migrate"
    leader_only: true
  99customize:
    command: "scripts/customize.sh"

【讨论】:

我不明白这将如何启动一个假设,cron 作业,启动应用程序后? 您可以添加一个脚本来创建 cron 作业。将其添加到您的 .ebextensions 目录并从您的扩展文件之一中调用它。检查文档,有几个例子。

以上是关于如何在 Elastic Beanstalk 上启动时运行一次 python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

在 Elastic Beanstalk 上自动启动 Celery

如何重新启动 httpd 以在 Elastic Beanstalk 中的 EC2 实例上启用 HTTPS?

如何在 Elastic Beanstalk 上部署自定义 docker 映像?

让 django celery worker 在 elastic-beanstalk 上启动的问题

在 Elastic Beanstalk 上启动 SQS celery worker

使用 cloudformation 在 Elastic Beanstalk 上启动 docker 多容器