我试图在Flask应用程序所需的弹性beantalk上运行huey任务队列。但是没有内置的方式将huey作为守护进程运行。 huey的作者建议使用supervisorthis link)运行huey,并且由于弹性beantalk已经使用了supervisor,所以我认为我们可以只添加要由supervisor管理的程序。但是我不确定如何以编程方式执行此操作。当前,我正在配置文件中使用container_commandsref 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.主管应处理色调过程的自动启动/停止。

最佳答案

我通过在名为002_supervisor.conf的ebextensions文件中执行以下操作来解决此问题。这是给django的,但我敢肯定它可以适合烧瓶。


创建主管配置文件
创建主管init.d文件
创建一个huey.conf文件以供主管加载


文件:
/usr/local/etc/supervisord.conf:
模式:“ 000755”
所有者:root
组:根
内容:
[unix_http_server]
file = / tmp / supervisor.sock; (套接字文件的路径)

[主管]
logfile = / tmp / supervisord.log; (主日志文件;默认$ CWD / supervisord.log)
pidfile = / tmp / supervisord.pid; (supervisord pidfile;默认supervisord.pid)
nodaemon = false; (如果为true,则从前台开始;默认为false)

[rpcinterface:主管]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[主管]
serverurl = unix:///tmp/supervisor.sock;将unix:// URL用于unix套接字

[包括]
文件= /usr/local/etc/*.conf

[inet_http_server]
端口= 127.0.0.1:9001
/etc/init.d/supervisord:
模式:“ 000755”
所有者:root
组:根
内容:
#!/ bin / bash

#源函数库
。 /etc/rc.d/init.d/functions

#源系统设置
如果[-f / etc / sysconfig / supervisord];然后
。 / etc / sysconfig / supervisord
科幻

#主管脚本的路径,服务器二进制文件,
#和消息的简写形式。
administratorctl = / usr / local / bin / supervisorctl
超级用户= $ {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

start(){
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}
}

reload(){
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 |尝试重新启动)
如果status -p $ {pidfile} $ supervisord>&/ dev / null;然后

开始
科幻
;;
强制重载|重载)
重装
;;
*)
echo $“用法:$ prog {开始|停止|重新启动| condrestart |尝试重新启动|强制重新加载|重新加载}”
RETVAL = 2
埃萨克

退出$ RETVAL
“ /opt/elasticbeanstalk/hooks/appdeploy/post/run_supervised_huey.sh”:
模式:“ 000755”
所有者:root
组:根
内容:
#!/ 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'`
env = $ {env%?}

#创建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
autostart = true
autorestart = true
startsecs = 10

;需要等待当前正在执行的任务在关闭时完成。
;如果您的任务运行时间很长,请增加此值。
stopwaitsecs = 60

;当诉诸将SIGKILL发送到程序以终止它时
;而是将SIGKILL发送到其整个流程组,
;还要照顾孩子
killasgroup = true
环境= $ env“

#创建celery主管conf脚本
回声“ $ hueyconf” |发球/usr/local/etc/huey.conf

#更新缓存中的监督者,而无需重新启动所有服务
/ usr / local / bin / supervisorctl重新读取
/ usr / local / bin / supervisorctl更新

#通过主管启动/重启huey
/ usr / local / bin / supervisorctl -c /usr/local/etc/supervisord.conf重新启动huey

命令:
01_start_supervisor:
命令:“ / etc / init.d / supervisord restart”
leader_only:是

关于python - 在Elastic Beanstalk上与主管一起在后台运行huey任务队列,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39870199/

10-10 20:39