2016-05-06 8 views
0

Ich habe Sellerie mit Redis auf einem Centos Linux-Server installiert.Sellerie läuft als Daemon stoppt

Ich beginne einen Sellerie Arbeiter den folgenden Befehl:

celery multi start worker1 -A proj -Q lopri,lopri2 -l info --pidfile="$HOME/run/celery/%n.pid" --logfile="$HOME/log/celery/%n.log" 

Das Problem ist, dass nach ein paar Stunden, die Arbeiter nicht mehr Aufgabenerstellung reagiert. Ich muss den Arbeiter neu starten, damit er Aufgaben erneut verarbeiten kann.

Hier ist die Sellerie-Einstellungsdatei in/etc/default/celeryd befindet:

# Names of nodes to start 
# most people will only start one node: 
CELERYD_NODES="worker1" 
# but you can also start multiple and configure settings 
# for each in CELERYD_OPTS (see `celery multi --help` for examples): 
#CELERYD_NODES="worker1 worker2 worker3" 
# alternatively, you can specify the number of nodes to start: 
#CELERYD_NODES=10 

# Absolute or relative path to the 'celery' command: 
CELERY_BIN="/usr/local/bin/celery" 
#CELERY_BIN="/virtualenvs/def/bin/celery" 

# App instance to use 
# comment out this line if you don't use an app 
CELERY_APP="proj" 
# or fully qualified: 
#CELERY_APP="proj.tasks:app" 

#django settings 
#export DJANGO_SETTINGS_MODULE="settings" 

# Where to chdir at start. 
CELERYD_CHDIR="/var/www/html/proj/" 

# Extra command-line arguments to the worker 
CELERYD_OPTS="--time-limit=300 --concurrency=8" 

# %N will be replaced with the first part of the nodename. 
CELERYD_LOG_FILE="/var/log/celery/%N.log" 
CELERYD_PID_FILE="/var/run/celery/%N.pid" 

# Workers should run as an unprivileged user. 
# You need to create this user manually (or you can choose 
# a user/group combination that already exists, e.g. nobody). 
CELERYD_USER="ec2-user" 
CELERYD_GROUP="ec2-user" 

# If enabled pid and log directories will be created if missing, 
# and owned by the userid/group configured. 
CELERY_CREATE_DIRS=1 

Ein Problem, das vielleicht ein Hinweis darauf, was, dass ich laufen muss „Start“ den Befehl von dem geschieht, ist, Projektordner andere weise erhalte ich die Fehlermeldung:

ImportError: No module named proj

Sollte nicht die CELERYD_CHDIR Einstellung darum kümmern? Heißt das, dass mein Startbefehl diese Sellerie-Standardeinstellungsdatei nicht verwendet?

Danke für jedes Licht, das Sie auf dieses Licht werfen können.

Antwort

2

Wenn Sie Sellerie über die Befehlszeile ausführen, ist Ihre Einstellungsdatei ziemlich nutzlos. Ich meine, sie werden nicht angewendet, deshalb erhalten Sie eine Fehlermeldung, dass Ihr Projekt nicht importiert werden kann.

Dies ist das Skript Sellerie als Daemon ausführen: https://github.com/celery/celery/blob/3.1/extra/generic-init.d/celeryd

Wie man hier sehen kann: https://github.com/celery/celery/blob/3.1/extra/generic-init.d/celeryd#L56 Das ist, wo das Skript Ihre Einstellungen importiert.

Ich bin nicht ganz sicher, warum Ihr selleryd nach ein paar Stunden funktioniert, aber das zeigt, dass Sie nicht wirklich als Daemon laufen. Vielleicht kann das Festlegen des Property-Skripts init.d mit Einstellungen das beheben, aber ich bezweifle es.

+0

Wie sollte ich Sellerie dann laufen? Wenn ich den Dienst selleryd starten starte, dann verbindet er sich nicht mit der Warteschlange, die ich in meinem django-Projekt eingerichtet habe. – Atma

+0

Wenn Sie alles richtig eingerichtet haben (Skript zu init.d hinzufügen, benutzerdefinierten Dienst erstellen usw.), sollte Ihr Sellerie automatisch nach dem Start ausgeführt werden. Es ist für jedes Betriebssystem anders, aber es sollte ziemlich einfach für Sie sein zu finden, wie Sie das tun können. Ich sehe Ihr Projekt ist in/var/www/html und Ihre Sellerie-Einstellungsdatei hat einen benutzerdefinierten Benutzer. Beachten Sie, dass dieser Benutzer Zugriff auf den Ordner benötigt. Dieser Pfad gehört standardmäßig zu root. Wenn Sie also Ihr Skript starten und ausführen, können Sie auf einige Berechtigungsprobleme stoßen. – henriquesg

Verwandte Themen