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 начать все