48

ワーカーのコードを更新するために新しいビルドを発行しているときに、セロリワーカーを正常に再起動するにはどうすればよいですか?

編集: 私がやろうとしていることは、このようなことです。

  • ワーカーが実行されており、おそらく100MBのファイルをS3にアップロードしています
  • 新しいビルドが来る
  • ワーカーコードに変更があります
  • ビルドスクリプトは、ワーカーにシグナルを送信します
  • 新しいコードで新しいワーカーを開始します
  • 既存のジョブ終了を終了した後にシグナルを受け取ったワーカー。
4

8 に答える 8

48

https://docs.celeryproject.org/en/master/userguide/workers.html#restarting-the-workerによると、HUP信号を送信してワーカーを再起動できます

 ps auxww | grep celeryd | grep -v "grep" | awk '{print $2}' | xargs kill -HUP
于 2012-03-19T14:30:06.707 に答える
14
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

于 2015-03-10T05:33:32.747 に答える
5

ルートに行く場合はkill、pgrepで救助してください。

kill -9 `pgrep -f celeryd`

念のために言っておきますが、これは長期的なタスクではなく、残酷に終了してもかまいません。開発中に新しいコードをリロードするだけです。それがより敏感であるならば、私は再起動サービスルートに行きます。

于 2016-03-15T06:57:02.030 に答える
4

できるよ:

celery multi restart w1 -A your_project -l info  # restart workers

于 2019-06-05T11:40:43.867 に答える
3

セロリの自動リロードを確認する必要があります

于 2012-03-19T11:37:43.143 に答える
2

長時間実行されるタスクはどうなりますか?私はこのようにそれが好きです:長時間実行されるタスクは彼らの仕事をするべきです。それらを中断しないでください。新しいタスクのみが新しいコードを取得する必要があります。

ただし、現時点ではこれは不可能です:https: //groups.google.com/d/msg/celery-users/uTalKMszT2Q/-MHleIY7WaIJ

于 2013-05-23T14:49:14.170 に答える
2

自動スクリプトを使用して-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)
于 2015-04-29T10:09:05.287 に答える
-1

パーティーに遅れるかもしれません。私が使う:

sudo systemctl stop celery

sudo systemctl start celery

sudo systemctl status celery

于 2021-01-06T21:35:26.510 に答える