【问题标题】:Run huey task queue in the background with supervisor on Elastic Beanstalk在 Elastic Beanstalk 上使用主管在后台运行 huey 任务队列
【发布时间】:2017-02-13 16:13:43
【问题描述】:

我正在尝试在我的 Flask 应用程序所需的弹性 beanstalk 上运行 huey 任务队列。但是没有内置的方式将huey作为守护进程运行。 huey 的作者建议使用 supervisor (this link) 运行 huey,并且由于弹性 beanstalk 已经使用了主管,我认为我们可以添加由主管管理的程序。但我不确定如何以编程方式执行此操作。目前,我正在使用配置文件中的container_commands (ref link) 键来运行它,但是弹性beantalk 在一段时间后在前台运行时给了我一个超时错误。下面是我正在使用的配置文件。

packages:
  yum:
    gcc: []
    gcc-c++: []
    gcc-gfortran: []
    htop: []
    make: []
    wget: []
    atlas-devel: []
    lapack-devel: []
commands:
  01enable_swap:
    command:
      - sudo dd if=/dev/zero of=/var/swap1 bs=1M count=1024
      - sudo mkswap /var/swap1
      - sudo chmod 644 /var/swap1
      - sudo swapon /var/swap1
    cwd: /home/ec2-user
  02install_redis:
    command:
      - wget "http://download.redis.io/redis-stable.tar.gz"
      - tar -xvzf redis-stable.tar.gz
      - rm redis-stable.tar.gz
      - cd redis-stable
      - sudo make
      - sudo make install
    cwd: /home/ec2-user
container_commands:
  01download_nltk_packages:
    command: "python install_resources.py"
  02run_redis:
    command: "redis-server --host 127.0.0.1 --port 6379 --daemonize yes"
  03run_huey:
    command: "huey_consumer jupiter.huey"

这是我想要实现的目标:
1. 部署我的 Flask 应用程序时,huey 应该作为后台进程运行。
2. supervisor应该处理huey进程的自动启动/停止。

【问题讨论】:

    标签: python amazon-web-services amazon-ec2 amazon-elastic-beanstalk python-huey


    【解决方案1】:

    我通过在名为 002_supervisor.conf 的 ebextensions 文件中执行以下操作解决了这个问题。这是为 django 准备的,但我确信它可以适用于烧瓶。

    1. 创建主管配置文件
    2. 创建主管 init.d 文件
    3. 创建一个由主管加载的 huey.conf 文件
    文件: /usr/local/etc/supervisord.conf: 模式:“000755” 所有者:根 组:根 内容:| [unix_http_server] 文件=/tmp/supervisor.sock ; (套接字文件的路径) [监督] 日志文件=/tmp/supervisord.log; (主日志文件;默认 $CWD/supervisord.log) pidfile=/tmp/supervisord.pid ; (supervisord pidfile;默认 supervisord.pid) 节点守护进程=假; (如果为真则在前台开始;默认为假) [rpc接口:主管] supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface [supervisorctl] serverurl=unix:///tmp/supervisor.sock ;对 unix 套接字使用 unix:// URL [包括] 文件 = /usr/local/etc/*.conf [inet_http_server] 端口 = 127.0.0.1:9001 /etc/init.d/supervisord: 模式:“000755” 所有者:根 组:根 内容:| #!/bin/bash # 源函数库 . /etc/rc.d/init.d/functions # 源系统设置 如果 [ -f /etc/sysconfig/supervisord ];然后 . /etc/sysconfig/supervisord 菲 # supervisorctl 脚本的路径,服务器二进制文件, # 和消息的简写形式。 supervisorctl=/usr/local/bin/supervisorctl supervisord=${SUPERVISORD-/usr/local/bin/supervisord} prog=主管 pidfile=${PIDFILE-/tmp/supervisord.pid} lockfile=${LOCKFILE-/var/lock/subsys/supervisord} STOP_TIMEOUT=${STOP_TIMEOUT-60} OPTIONS="${OPTIONS--c /usr/local/etc/supervisord.conf}" RETVAL=0 开始() { echo -n $"开始 $prog:" 守护进程 --pidfile=${pidfile} $supervisord $OPTIONS RETVAL=$? 回声 如果 [ $RETVAL -eq 0 ];然后 触摸 ${lockfile} $supervisorctl $OPTIONS 状态 菲 返回 $RETVAL } 停止() { echo -n $"停止 $prog:" killproc -p ${pidfile} -d ${STOP_TIMEOUT} $supervisord RETVAL=$? 回声 [ $RETVAL -eq 0 ] && rm -rf ${lockfile} ${pidfile} } 重载(){ echo -n $"重新加载 $prog:" LSB=1 killproc -p $pidfile $supervisord -HUP RETVAL=$? 回声 如果 [ $RETVAL -eq 7 ];然后 失败 $"$prog 重新加载" 别的 $supervisorctl $OPTIONS 状态 菲 } 重新开始() { 停止 开始 } 案例“$1”在 开始) 开始 ;; 停止) 停止 ;; 状态) 状态 -p ${pidfile} $supervisord RETVAL=$? [ $RETVAL -eq 0 ] && $supervisorctl $OPTIONS 状态 ;; 重新开始) 重新开始 ;; condrestart|尝试重启) 如果状态 -p ${pidfile} $supervisord >&/dev/null;然后 停止 开始 菲 ;; 强制重新加载|重新加载) 重新加载 ;; *) echo $"用法:$prog {start|stop|restart|condrestart|try-restart|force-reload|reload}" RETVAL=2 经社理事会 退出 $RETVAL “/opt/elasticbeanstalk/hooks/appdeploy/post/run_supervised_huey.sh”: 模式:“000755” 所有者:根 组:根 内容:| #!/usr/bin/env bash # 获取django环境变量 env=`cat /opt/python/current/env | tr '\n' ',' | sed 's/export //g' | sed 's/$PATH/%(ENV_PATH)s/g' | sed 's/$PYTHONPATH//g' | sed 's/$LD_LIBRARY_PATH//g' | sed 's/%/%%/g'` 环境=${环境%?} # 创建huey配置脚本 hueyconf="[程序:huey] ;如果使用 virtualenv,则设置 celery 程序的完整路径 命令=/opt/python/current/app/production.py run_huey 用户=无人 numprocs=1 stdout_logfile=/var/log/huey.log stderr_logfile=/var/log/huey.log 自动启动=真 自动重启=真 开始秒=10 ;需要等待当前正在执行的任务在关机时完成。 ;如果您有很长时间运行的任务,请增加此值。 停止等待秒 = 60 ;当诉诸向程序发送 SIGKILL 以终止它时 ;将 SIGKILL 发送到其整个进程组, ;还要照顾它的孩子。 killasgroup=真 环境=$env" # 创建 celery supervisord 配置脚本 回声“$hueyconf”|三通 /usr/local/etc/huey.conf # 更新缓存中的supervisord而不重启所有服务 /usr/local/bin/supervisorctl 重读 /usr/local/bin/supervisorctl 更新 # 通过supervisord启动/重启huey /usr/local/bin/supervisorctl -c /usr/local/etc/supervisord.conf 重启huey 命令: 01_start_supervisor: 命令:'/etc/init.d/supervisord 重启' 仅领导者:真

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-06-20
      • 2013-11-08
      • 2013-01-10
      • 2013-06-13
      • 2013-11-23
      • 2016-02-13
      • 2019-12-13
      • 2018-03-21
      相关资源
      最近更新 更多