2017-10-18 7 views
2

Je cours le céleri sur la production en utilisant supervord. Ma configuration de superviseur est ci-dessous.Comment redémarrer Céleri Wroker géré par Supervisord

[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 

Ma commande pour exécuter travailleur de céleri est

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

Je veux demander, comment redémarrer travailleur de céleri quand mes changements codebase dans la production?

+0

Quel est le problème avec 'supervisorctl restart celeryd'? –

+0

J'ai utilisé 'supervisorctl restart celeryd' mais après l'avoir utilisé plusieurs fois, le serveur ralentit. Quand je vérifie le bélier, la plus grande partie du bélier était occupée par des céleris. Il y avait près de 15 travailleurs en arrière-plan. –

+2

J'ai eu le même problème. Le paramètre 'killasgroup = true' dans le script supervisord l'a résolu pour moi. –

Répondre

1

Le principal problème je rencontre est que les longues tâches en cours d'exécution peuvent se faire tuer si vous dites superviseur de killasgroup qui aurait pour conséquence la perte de données.

La solution que j'ai déplacée à utiliser est de dire le processus principal à TERM qui va tuer les travailleurs à la fin de leurs tâches. le superviseur redémarre ensuite le processus principal après que tous les travailleurs ont terminé.

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

Ceci est également associé. Celery Production Graceful Restart

0

Ajouter la suite dans le fichier superviseur et redémarrer le superviseur.

killasgroup = true