3

对于一点背景。我正在使用 Supervisor 来监控 django-celery 进程。我需要能够设置virutalenv,然后启动celeryd 进程。

我目前正在这样做的方式是,在supervisor.conf我拥有的文件中

[program:celery]  
command = /srv/worker.sh

stdout_logfile = /srv/supervisor.log
stderr_logfile = /srv/supervisor.log

然后在worker.sh我有

/bin/su - username -c "source /srv/virtualenvs/bin/activate; python /srv/manage.py celeryd

这行得通,有点。问题是,当我supervisorctl stop celery与主管合作时,它不会杀死工人。他们仍然存在。我在想,如果我能够在主管中激活 virtualenv,一切都会比放入 shell 脚本更好。

4

1 回答 1

1

TERM 信号被发送到 shell 脚本而不是 celeryd。要么不使用它(因为您可以从 supervisord conf 设置用户)或使用 exec。

无论如何,最佳做法是(如果您不关心丢失某些任务):short stopwaitsecs 和 killasgroup=true。

例如:

[program:celery]
command=celeeryd blablabla
user=username 
stopwaitsecs=10
killasgroup=true
于 2013-03-24T00:53:43.950 回答