Django
Запуск сельдерея с супервизором
Поиск…
Конфигурация сельдерея
СЕЛЬДЕРЕЙ
Установка -
pip install django-celery
добавлять
Основная структура проекта.
- src/ - bin/celery_worker_start # will be explained later on - logs/celery_worker.log - stack/__init __.py - stack/celery.py - stack/settings.py - stack/urls.py - manage.py
Добавьте файл
celery.py
вstack/stack/
папкуstack/stack/
папку.from __future__ import absolute_import import os from celery import Celery os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'stack.settings') from django.conf import settings # noqa app = Celery('stack') app.config_from_object('django.conf:settings') app.autodiscover_tasks(lambda: settings.INSTALLED_APPS)
в ваш
stack/stack/__init__.py
добавьте следующий код:from __future__ import absolute_import from .celery import app as celery_app # noqa
Создайте задачу и отметьте ее, например, как
@shared_task()
@shared_task() def add(x, y): print("x*y={}".format(x*y))
Запуск работника сельдерея «вручную»:
celery -A stack worker -l info
если вы также хотите добавить
Управляющий супервайзер
Создайте скрипт, чтобы начать работу с сельдереем. Вставьте скрипт в свое приложение. Например:
stack/bin/celery_worker_start
#!/bin/bash NAME="StackOverflow Project - celery_worker_start" PROJECT_DIR=/home/stackoverflow/apps/proj/proj/ ENV_DIR=/home/stackoverflow/apps/proj/env/ echo "Starting $NAME as `whoami`" # Activate the virtual environment cd "${PROJECT_DIR}" if [ -d "${ENV_DIR}" ] then . "${ENV_DIR}bin/activate" fi celery -A stack --loglevel='INFO'
Добавить права выполнения для вновь созданного скрипта:
chmod u+x bin/celery_worker_start
Установите диспетчер (пропустите этот тест, если супервизор уже установлен)
apt-get install supervisor
Добавьте файл конфигурации для своего супервизора, чтобы начать сельдерей. Поместите его в
/etc/supervisor/conf.d/stack_supervisor.conf
[program:stack-celery-worker] command = /home/stackoverflow/apps/stack/src/bin/celery_worker_start user = polsha stdout_logfile = /home/stackoverflow/apps/stack/src/logs/celery_worker.log redirect_stderr = true environment = LANG = en_US.UTF-8,LC_ALL = en_US.UTF-8 numprocs = 1 autostart = true autorestart = true startsecs = 10 stopwaitsecs = 600 priority = 998
Перечитать и обновить супервизор
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
Основные команды
sudo supervisorctl status stack-celery-worker stack-celery-worker RUNNING pid 18020, uptime 0:00:50 sudo supervisorctl stop stack-celery-worker stack-celery-worker: stopped sudo supervisorctl start stack-celery-worker stack-celery-worker: started sudo supervisorctl restart stack-celery-worker stack-celery-worker: stopped stack-celery-worker: started
Celery + RabbitMQ с супервизором
Сельдерей требует брокера для обработки сообщений. Мы используем RabbitMQ, потому что его легко настроить, и он хорошо поддерживается.
Установите rabbitmq, используя следующую команду:
sudo apt-get install rabbitmq-server
По завершении установки создайте пользователя, добавьте виртуальный хост и установите разрешения.
sudo rabbitmqctl add_user myuser mypassword
sudo rabbitmqctl add_vhost myvhost
sudo rabbitmqctl set_user_tags myuser mytag
sudo rabbitmqctl set_permissions -p myvhost myuser ".*" ".*" ".*"
Чтобы запустить сервер:
sudo rabbitmq-server
Мы можем установить сельдерей с пипеткой:
pip install celery
В файле настроек Django settings.py ваш URL-адрес брокера будет выглядеть примерно так:
BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'
Теперь начните работу сельдерея
celery -A your_app worker -l info
Эта команда запускает работника Celery для выполнения любых задач, определенных в вашем приложении django.
Supervisor - это программа Python, которая позволяет вам контролировать и поддерживать любые процессы unix. Он также может перезапускать разбитые процессы. Мы используем его, чтобы убедиться, что работники сельдерея всегда работают.
Во-первых, Install supervisor
sudo apt-get install supervisor
Создайте файл your_proj.conf в вашем супервизоре conf.d (/etc/supervisor/conf.d/your_proj.conf):
[program:your_proj_celery]
command=/home/your_user/your_proj/.venv/bin/celery --app=your_proj.celery:app worker -l info
directory=/home/your_user/your_proj
numprocs=1
stdout_logfile=/home/your_user/your_proj/logs/celery-worker.log
stderr_logfile=/home/your_user/your_proj/logs/low-worker.log
autostart=true
autorestart=true
startsecs=10
После создания и сохранения нашего конфигурационного файла мы можем сообщить Супервизору нашей новой программы с помощью команды supervisorctl. Сначала мы советуем Supervisor искать любые новые или измененные конфигурации программ в каталоге /etc/supervisor/conf.d с:
sudo supervisorctl reread
Затем следуйте указаниям, чтобы внести изменения в:
sudo supervisorctl update
Когда наши программы будут запущены, несомненно, будет время, когда мы хотим остановить, перезапустить или увидеть их статус.
sudo supervisorctl status
Для перезапуска вашего экземпляра сельдерея:
sudo supervisorctl restart your_proj_celery