2017-10-18 16 views
2

スーパーバイザを使用して生産中のセロリを実行しています。私の監督者の構成は以下の通りです。セロリを再起動する方法Supervisordによって実行されたWroker

[program:celeryd] 
command=%(ENV_PROJECT_PATH)s/scripts/celery_worker.sh 
stdout_logfile=%(ENV_PROJECT_PATH)s/celeryd.log 
stderr_logfile=%(ENV_PROJECT_PATH)s/celeryd.log 
autostart=true 
autorestart=true 
startsecs=10 
stopwaitsecs=1000 
priority=1000 

セロリワーカーを実行するための私のコマンドが

celery_path=$(which celery) 
$celery_path -A Project_Name worker --loglevel=info 

である私は私のコードベースが生産に変化したときにセロリの労働者を再起動する方法を、お聞きしたいですか?

+0

'supervisorctl restart celeryd'の問題点は何ですか? –

+0

私は 'supervisorctl restart celeryd'を使用しましたが、これを複数回使用すると、サーバは遅くなります。私がラムを調べると、ラムのほとんどはセロリの労働者が占めていた。バックグラウンドで約15人の労働者が走っていた。 –

+2

私は同じ問題を抱えていました。スーパースクリプトスクリプトのパラメータkillasgroup = trueは私のためにそれを解決しました。 –

答えて

1

私はに実行する主な問題は、データが失われることになるkillasgroupするスーパーバイザーを伝える場合は、長時間実行されるタスクが殺されるかもしれないということです。

私が使ったのは、メインプロセスにTERMを伝えることです.TERMは、作業を終了するときに労働者を殺すことになります。スーパーバイザは、すべての作業者が終了した後、メインプロセスを再開します。

ps aux | grep celery.*MainProcess | awk '{print $2}' | xargs kill -TERM 

これも関連しています。 Celery Production Graceful Restart

0

スーパーバイザファイルに以下を追加し、スーパーバイザを再起動してください。

killasgroup =真

関連する問題