2012-05-29 66 views
3

有點背景。我使用Supervisor來監控django-celery進程。我需要能夠設置virutalenv,然後啓動芹菜過程。在Supervisord中激活vitualenv

,我目前在做它的方式是,在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腳本更好。

+12

這是沒有必要爲'源斌/ activate'一個virtualenv中運行的東西。只需使用virtualenv的python即可運行。例如:'/ srv/virtualenvs/bin/python/srv/manage.py' –

+4

檢出https://github.com/mher/celery-deploy。它用supervisord管理celeryd進程。 – mher

回答

1

TERM信號正在發送到shell腳本而不是celeryd。請不要使用它(因爲您可以從supervisord conf中設置用戶)或使用exec。

無論如何,最好的做法是(如果你不關心失去一些任務):短暫stopwaitsecs和killasgroup = true。

如:

[program:celery] 
command=celeeryd blablabla 
user=username 
stopwaitsecs=10 
killasgroup=true