Amazon web services 弹性豆茎芹菜酱和容器
我试图在Elastic Beanstalk上运行芹菜节拍,但它在自动缩放时会在所有实例上运行,这会导致重复周期性任务。我找到了一个解决方案,其中包括标记leader实例,并仅在该实例上运行芹菜节拍主管流程,但它对我不起作用 这是我的Amazon web services 弹性豆茎芹菜酱和容器,amazon-web-services,amazon-elastic-beanstalk,celery,Amazon Web Services,Amazon Elastic Beanstalk,Celery,我试图在Elastic Beanstalk上运行芹菜节拍,但它在自动缩放时会在所有实例上运行,这会导致重复周期性任务。我找到了一个解决方案,其中包括标记leader实例,并仅在该实例上运行芹菜节拍主管流程,但它对我不起作用 这是我的.ebextensions/program.config中的代码 files: "/opt/elasticbeanstalk/hooks/appdeploy/post/10_restart_supervisor.sh": mode: &
.ebextensions/program.config中的代码
files:
"/opt/elasticbeanstalk/hooks/appdeploy/post/10_restart_supervisor.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
if [ -f /tmp/leader_only ]
then
docker exec `docker ps --no-trunc -q | head -n 1` cp /srv/supervisor-app-beat.conf /etc/supervisor/conf.d/supervisor-app-beat.conf
fi
docker exec --privileged -d `docker ps --no-trunc -q | head -n 1` killall -q supervisord
docker exec --privileged -d `docker ps --no-trunc -q | head -n 1` supervisord -n
"/opt/elasticbeanstalk/hooks/restartappserver/post/11_restart_supervisor.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
if [ -f /tmp/leader_only ]
then
docker exec `docker ps --no-trunc -q | head -n 1` cp /srv/supervisor-app-beat.conf /etc/supervisor/conf.d/supervisor-app-beat.conf
fi
docker exec --privileged -d `docker ps --no-trunc -q | head -n 1` killall -q supervisord
docker exec --privileged -d `docker ps --no-trunc -q | head -n 1` supervisord -n
"/opt/elasticbeanstalk/hooks/configdeploy/post/12_restart_supervisor.sh":
mode: "000755"
owner: root
group: root
content: |
#!/usr/bin/env bash
if [ -f /tmp/leader_only ]
then
docker exec `docker ps --no-trunc -q | head -n 1` cp /srv/supervisor-app-beat.conf /etc/supervisor/conf.d/supervisor-app-beat.conf
fi
docker exec --privileged -d `docker ps --no-trunc -q | head -n 1` killall -q supervisord
docker exec --privileged -d `docker ps --no-trunc -q | head -n 1` supervisord -n
container_commands:
01_mark_lead:
command: "touch /tmp/leader_only"
leader_only: true
并且命令01\u mark\u lead
成功运行,如日志/var/log/cfn init cmd.log
2020-11-15 18:53:54,354 P17245 [INFO] ============================================================
2020-11-15 18:53:54,354 P17245 [INFO] Test for Command 01_mark_lead
2020-11-15 18:53:54,358 P17245 [INFO] Completed successfully.
2020-11-15 18:53:54,359 P17245 [INFO] ============================================================
2020-11-15 18:53:54,359 P17245 [INFO] Command 01_mark_lead
2020-11-15 18:53:54,363 P17245 [INFO] Completed successfully.
但是,当我尝试检查容器时,我没有看到创建的leader\u
文件或启动了节拍过程,我做错了什么?随着时间的推移,leader可能会改变,因此我不确定这是否是最佳方法。但对于您的特定问题,我会尝试将命令更改为命令:“touch/tmp/leader\u only&&ls-l/tmp”
,以查看文件是否在运行时创建。如果是的话,那么很可能是某个地方删除了它。