如何在 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 上启动的问题