0

Celery ワーカーと cron ジョブ用のセロリ ビートを使用して Django サイトを実行しています。スーパーバイザーが再起動されたとき、またはスーパーバイザーのジョブが再起動されたときに、不正なセロリ ビート プロセスが実行され続けることがあります(正確にいつ発生するかはわかりません)。基本的に、これらのタスクを複製する 2 つのセロリ ビート プロセスが実行されることになります。1 つのタスクがリマインダー メールを送信し、これが発生すると多くのユーザーが重複したメールを受信するため、これは問題です。

セロリビートとスーパーバイザーで同様の経験をした人はいますか。セロリビートプロセスが常に1つだけ実行されていることを確認する方法はありますか?

4

1 に答える 1

0

おそらくもっと良い答えがあるかもしれませんが、これが私がこれまでに思いついたものです...

スーパーバイザーを再起動する展開中に不正なプロセスが発生すると思います。私はこれから行きました:

fab.sudo('supervisorctl restart all')

これに:

fab.sudo('supervisorctl stop all')
with fab.settings(warn_only=True):
    fab.run("ps auxww | grep 'celery' | awk '{print $2}' | xargs kill -9")
fab.sudo('supervisorctl start all')

これは機能しているようですが、これが最も信頼できるソリューションであるかどうかはわかりません。

于 2014-05-05T17:32:07.527 に答える