ワーカーのコードを更新するために新しいビルドを発行しているときに、セロリワーカーを正常に再起動するにはどうすればよいですか?
編集:私がやろうとしているのは、このようなことです。
ワーカーを再起動するための新しい推奨される方法は、ここに記載されています http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker
$ celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid
$ celery multi restart 1 --pidfile=/var/run/celery/%n.pid
http://ask.github.com/celery/userguide/workers.html#restarting-the-worker に従って、HUPシグナルを送信しているワーカーを再起動できます。
ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | xargs kill -HUP
celery multi start 1 -A proj -l info -c4 --pidfile=/var/run/celery/%n.pid
celery multi restart 1 --pidfile=/var/run/celery/%n.pid
http://docs.celeryproject.org/en/latest/userguide/workers.html#restarting-the-worker
kill
ルートを使用している場合は、pgrepが助けになります。
kill -9 `pgrep -f celeryd`
念のため、これは長時間実行されるタスクではなく、残酷に終了するかどうかは気にしません。開発中に新しいコードをリロードするだけです。より敏感な場合は、再起動サービスルートに行きます。
Celeryの autoreloading を見てください
自動スクリプトを使用して-HUPソリューションを繰り返しテストしましたが、約5%の時間で、ワーカーは再起動後に新しいジョブの取得を停止します。
より信頼性の高いソリューションは次のとおりです。
stop <celery_service>
start <celery_service>
これは何百回も問題なく使用しています。
Python内から、次を実行できます。
import subprocess
service_name = 'celery_service'
for command in ['stop', 'start']:
subprocess.check_call(command + ' ' + service_name, Shell=True)
できるよ:
celery multi restart w1 -A your_project -l info#ワーカーの再起動 リンクの説明をここに入力
長時間実行されているタスクはどうなりますか?私はこの方法が好きです:長時間実行されるタスクは自分の仕事をするべきです。それらを中断しないでください。新しいタスクのみが新しいコードを取得する必要があります。
ただし、現時点ではこれは不可能です。 https://groups.google.com/d/msg/celery-users/uTalKMszT2Q/-MHleIY7WaIJ