Celery-Supervisor: Как перезапустить работу супервизора, чтобы новые обновленные задачи сельдерея работали?

У меня есть текущая работа супервизора для моего сервера сельдерея. Теперь мне нужно добавить новую задачу, но, к сожалению, моя команда сервера сельдерея не настроена на автоматическое отслеживание этих динамических изменений.

Вот моя команда сельдерея:

python manage.py celery worker --broker=amqp://username:password@localhost/our_app_vhost

Чтобы возобновить мой процесс сельдерея, я попытался,

sudo supervisorctl -c /etc/supervisor/supervisord.conf restart <process_name>
supervisorctl stop all
supervisorctl start all
service supervisor restart

Но ничего не нашло работы. Как его перезапустить?

3 ответа

Решение

Если вы хотите управлять процессом с помощью supervisorctl, вам следует настроить supervisorctl, rpcinterface в вашем файле конфигурации.

Вот пример файла конфигурации.

sample.conf

[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB        ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10           ; (num of main logfile rotation backups;default 10)
loglevel=info                ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false               ; (start in foreground if true;default false)
minfds=1024                  ; (min. avail startup file descriptors;default 1024)
minprocs=200                 ; (min. avail process descriptors;default 200)

[program:my_worker]
command = python manage.py celery worker --broker=amqp://username:password@localhost/our_app_vhost

[unix_http_server]
file=/tmp/supervisor.sock   ; (the path to the socket file)

[supervisorctl]
serverurl=unix:///tmp/supervisor.sock ; use a unix:// URL  for a unix socket

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

Теперь начните с

supervisord -c sample.conf

Теперь, если вы хотите перезапустить ваш работник, вы можете сделать это с

supervisorctl -c sample.conf restart my_worker

Это перезапустит ваш работник. В качестве альтернативы вы также можете перейти в супервизор и перезапустить его.

sudo supervisorctl -c sample.conf
supervisor> restart my_worker
my_worker: stopped
my_worker: started

Замечания:

Есть возможность автозагрузки рабочих в сельдерее

python manage.py celery worker --autoreload --broker=amqp://username:password@localhost/our_app_vhost

Это следует использовать только в режиме разработки. Использование этого в производстве не рекомендуется.

Больше об этом на документах сельдерея.

Вы можете написать свою задачу сельдерея в /etc/supervisor/conf.d/, создать новый файл конфигурации для сельдерея, как celery.conf,

Предполагая, что ваша виртуальность venv, ваш проект django - это образец, а ваш скрипт на сельдерее находится в _celery.py

Файл должен выглядеть так

[program:celery]
command=/home/ubuntu/.virtualenvs/venv/bin/celery --app=sample._celery:app worker --loglevel=INFO
directory=/home/ubuntu/sample/
user=ubuntu
numprocs=1
stdout_logfile=/home/ubuntu/logs/celery-worker.log
stderr_logfile=/home/ubuntu/logs/celery-error.log
autostart=true
autorestart=true
startsecs=10

; Need to wait for currently executing tasks to finish at shutdown.
; Increase this if you have very long running tasks.
stopwaitsecs = 600

; When resorting to send SIGKILL to the program to terminate it
; send SIGKILL to its whole process group instead,
; taking care of its children as well.
killasgroup=true

; if rabbitmq is supervised, set its priority higher
; so it starts first
priority=998

после написания этой программы супервизора вам нужно запустить

Если вы добавите программу supervisor, запустите$ sudo supervisorctl reread

сельдерей: есть

Если вы добавляете / обновляете программу супервизора, запустите$ sudo supervisorctl update

сельдерей: добавлен процесс группы

Чтобы проверить статус вашего задания сельдерея$ sudo supervisorctl status celery

сельдерей RUNNING pid 18020, время безотказной работы 0:00:50

Чтобы остановить задачу сельдерея$ sudo supervisorctl stop celery

сельдерей: остановлен

Чтобы начать задачу сельдерея$ sudo supervisorctl start celery

сельдерей: началось

Чтобы перезапустить задачу сельдерея (это остановит и снова запустит указанную задачу)$ sudo supervisorctl restart celery

сельдерей: остановили сельдерей: начали

Если какое-то задание выполняется, перезапустите сельдерей, ожидая его завершения. Так что надо убить весь запущенный процесс. выполните следующую команду, чтобы убить весь процесс сельдерея:

kill -9 $ (ps aux | grep celery | grep -v grep | awk '{print $ 2}' | tr '\ n' '')> / dev / null 2> & 1

Перезагрузите сельдерей:

sudo supervisorctl остановить все
sudo supervisorctl начать все
Другие вопросы по тегам