首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >带监督的Celeryd多个

带监督的Celeryd多个
EN

Stack Overflow用户
提问于 2016-05-14 05:16:58
回答 1查看 4.2K关注 0票数 6

试图运行管理(3.2.2)与芹菜多。

似乎是监督无法处理。一个芹菜工人工作得很好。

这是我的监控程序配置

代码语言:javascript
复制
celery multi v3.1.20 (Cipater)
> Starting nodes...
    > celery1@parzee-dev-app-sfo1: OK
Stale pidfile exists. Removing it.
    > celery2@parzee-dev-app-sfo1: OK
Stale pidfile exists. Removing it.

celeryd.conf

代码语言:javascript
复制
; ==================================
;  celery worker supervisor example
; ==================================

[program:celery]
; Set full path to celery program if using virtualenv
command=/usr/local/src/imbue/application/imbue/supervisorctl/celeryd/celeryd.sh
process_name = %(program_name)s%(process_num)d@%(host_node_name)s
directory=/usr/local/src/imbue/application/imbue/conf/
numprocs=2
stderr_logfile=/usr/local/src/imbue/application/imbue/log/celeryd.err
logfile=/usr/local/src/imbue/application/imbue/log/celeryd.log
stdout_logfile_backups = 10
stderr_logfile_backups = 10
stdout_logfile_maxbytes = 50MB
stderr_logfile_maxbytes = 50MB
autostart=true
autorestart=false
startsecs=10

我使用下面的监督变量来模拟我开始芹菜的方式:

  • %(program_name)s
  • %(process_num)d
  • @
  • %(host_node_name)s

监督员

代码语言:javascript
复制
supervisorctl 
celery:celery1@parzee-dev-app-sfo1   FATAL     Exited too quickly (process log may have details)
celery:celery2@parzee-dev-app-sfo1   FATAL     Exited too quickly (process log may have details)

我尝试在/usr/local/lib/python2.7/dist-packages/supervisor/options.py from 0 to 1:中更改此值

代码语言:javascript
复制
numprocs_start = integer(get(section, 'numprocs_start', 1))

我还是明白:

代码语言:javascript
复制
celery:celery1@parzee-dev-app-sfo1   FATAL     Exited too quickly (process log may have details)
celery:celery2@parzee-dev-app-sfo1   EXITED    May 14 12:47 AM

芹菜已经开始了,但是监督部门并没有跟踪它。

root@parzee-dev-app-sfo1:/etc/主管#

代码语言:javascript
复制
ps -ef | grep celery
root      2728     1  1 00:46 ?        00:00:02 [celeryd: celery1@parzee-dev-app-sfo1:MainProcess] -active- (worker -c 16 -n celery1@parzee-dev-app-sfo1 --loglevel=DEBUG -P processes --logfile=/usr/local/src/imbue/application/imbue/log/celeryd.log --pidfile=/usr/local/src/imbue/application/imbue/log/1.pid)
root      2973     1  1 00:46 ?        00:00:02 [celeryd: celery2@parzee-dev-app-sfo1:MainProcess] -active- (worker -c 16 -n celery2@parzee-dev-app-sfo1 --loglevel=DEBUG -P processes --logfile=/usr/local/src/imbue/application/imbue/log/celeryd.log --pidfile=/usr/local/src/imbue/application/imbue/log/2.pid)

celery.sh

代码语言:javascript
复制
source ~/.profile
CELERY_LOGFILE=/usr/local/src/imbue/application/imbue/log/celeryd.log
CELERYD_OPTS=" --loglevel=DEBUG"
CELERY_WORKERS=2
CELERY_PROCESSES=16
cd /usr/local/src/imbue/application/imbue/conf
exec celery multi start $CELERY_WORKERS -P processes -c $CELERY_PROCESSES -n celeryd@{HOSTNAME} -f $CELERY_LOGFILE $CELERYD_OPTS

类似:multi with supervisor How to use Supervisor + Django + Celery with multiple Queues and Workers?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-05-15 03:35:31

由于监控器监视进程(开始/停止/重新启动)进程,进程应该在前台运行(不应该是去守护的)。

芹菜多功能自成体系,不能与上级一起运行。

您可以为每个员工创建单独的进程,并将它们分组为一个。

代码语言:javascript
复制
[program:worker1]
command=celery worker -l info -n worker1

[program:worker2]
command=celery worker -l info -n worker2

[group:workers]
programs=worker1,worker2

您还可以编写一个makes daemon process run in foreground喜欢的shell脚本。

代码语言:javascript
复制
#! /usr/bin/env bash
set -eu

pidfile="/var/run/your-daemon.pid"
command=/usr/sbin/your-daemon

# Proxy signals
function kill_app(){
    kill $(cat $pidfile)
    exit 0 # exit okay
}
trap "kill_app" SIGINT SIGTERM

# Launch daemon
$ celery multi start 2 -l INFO

sleep 2

# Loop while the pidfile and the process exist
while [ -f $pidfile ] && kill -0 $(cat $pidfile) ; do
    sleep 0.5
done
exit 1000 # exit unexpected
票数 22
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37222857

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档