Django
Sellerie mit Supervisor laufen lassen
Suche…
Sellerie-Konfiguration
SELLERIE
Installation -
pip install django-celery
Hinzufügen
Grundlegende Projektstruktur.
- 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
Fügen
celery.py
Dateicelery.py
Ihremstack/stack/
Ordner hinzu.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
Sie Ihremstack/stack/__init__.py
folgenden Code hinzu:from __future__ import absolute_import from .celery import app as celery_app # noqa
Erstellen Sie eine Aufgabe und markieren Sie sie beispielsweise als
@shared_task()
@shared_task() def add(x, y): print("x*y={}".format(x*y))
Laufender Selleriearbeiter "von Hand":
celery -A stack worker -l info
wenn Sie auch hinzufügen möchten
Supervisor ausführen
Erstellen Sie ein Skript, um den Sellerie-Arbeiter zu starten. Fügen Sie Ihr Skript in Ihre App ein. Zum Beispiel:
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'
Fügen Sie dem neu erstellten Skript Ausführungsrechte hinzu:
chmod u+x bin/celery_worker_start
Supervisor installieren (diesen Test überspringen, wenn Supervisor bereits installiert ist)
apt-get install supervisor
Fügen Sie die Konfigurationsdatei für Ihren Supervisor hinzu, um Ihren Sellerie zu starten.
/etc/supervisor/conf.d/stack_supervisor.conf
es in/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
Supervisor erneut lesen und aktualisieren
sudo supervisorctl reread stack-celery-worker: available sudo supervisorctl update stack-celery-worker: added process group
Grundlegende Befehle
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
Sellerie + KaninchenMQ mit Supervisor
Sellerie benötigt einen Broker, um das Weiterleiten von Nachrichten abzuwickeln. Wir verwenden RabbitMQ, weil es einfach einzurichten ist und gut unterstützt wird.
Installieren Sie rabbitmq mit dem folgenden Befehl
sudo apt-get install rabbitmq-server
Erstellen Sie nach Abschluss der Installation den Benutzer, fügen Sie einen virtuellen Host hinzu und legen Sie die Berechtigungen fest.
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 ".*" ".*" ".*"
So starten Sie den Server:
sudo rabbitmq-server
Wir können Sellerie mit Pip installieren:
pip install celery
In Ihrer Datei Django settings.py würde Ihre Broker-URL dann ungefähr so aussehen
BROKER_URL = 'amqp://myuser:mypassword@localhost:5672/myvhost'
Starten Sie jetzt den Selleriearbeiter
celery -A your_app worker -l info
Mit diesem Befehl können Sie einen Celery-Mitarbeiter starten, um alle in Ihrer Django-App definierten Aufgaben auszuführen.
Supervisor ist ein Python-Programm, mit dem Sie Unix-Prozesse steuern und ausführen können. Es kann auch abgestürzte Prozesse neu starten. Wir verwenden es, um sicherzustellen, dass die Celery-Mitarbeiter immer laufen.
Installieren Sie zunächst den Supervisor
sudo apt-get install supervisor
Erstellen Sie Ihre_proj.conf-Datei in Ihrem Supervisor 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
Nachdem unsere Konfigurationsdatei erstellt und gespeichert wurde, können wir Supervisor über den Befehl supervisorctl über unser neues Programm informieren. Zuerst weisen wir Supervisor an, nach neuen oder geänderten Programmkonfigurationen im Verzeichnis /etc/supervisor/conf.d zu suchen:
sudo supervisorctl reread
Anschließend mit dem Hinweis, dass Änderungen vorgenommen werden sollen, mit:
sudo supervisorctl update
Sobald unsere Programme ausgeführt werden, wird es zweifellos eine Zeit geben, zu der wir den Status stoppen, neu starten oder sehen möchten.
sudo supervisorctl status
Um Ihre Sellerie-Instanz neu zu starten:
sudo supervisorctl restart your_proj_celery