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をアクティブ化できれば、シェルスクリプトにドロップするよりもすべてがうまく機能すると思います。

4

1 に答える 1

1

TERMシグナルは、celerydではなくシェルスクリプトに送信されます。使用しないか(supervisord confからユーザーを設定できるため)、execを使用します。

とにかく、ベストプラクティスは(いくつかのタスクを失うことを気にしない場合):短いstopwaitsecsとkillasgroup=trueです。

例えば:

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