有点背景知识。我正在使用Supervisor来监控django-celery流程。我需要能够设置virutalenv然后启动芹菜过程。
我目前正在进行的方式是,在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
与主管一起时,它不会杀死工人。他们仍然存在。我想如果我能够在supervisor中激活virtualenv,一切都会比放入shell脚本更好。
答案 0 :(得分:1)
TERM信号被发送到shell脚本而不是celeryd。要么不使用它(因为你可以从supervisord conf设置用户)或使用exec。
无论如何,最好的做法是(如果你不关心失去一些任务):short stopwaitsecs和killasgroup = true。
例如:
[program:celery]
command=celeeryd blablabla
user=username
stopwaitsecs=10
killasgroup=true