14 Stimmen

Die Überwachung von celerybeat mit Supervisor und Virtualenv

Meine celerybeat.conf

[program:celerybeat]
command=/path/app/env/bin/celery beat -A project.tasks --loglevel=INFO
environment=PYTHONPATH=/path/app/env/bin

user=nobody
numprocs=1
stdout_logfile=/var/log/celeryd.log
stderr_logfile=/var/log/celeryd.log
autostart=true
autorestart=true
startsecs=10
stopwaitsecs = 600
killasgroup=true
priority=998

Wenn ich supervisor starte, erhalte ich einen Fehler:

pidfile_fd = os.open(self.path, PIDFILE_FLAGS, PIDFILE_MODE)
celery.platforms.LockFailed: [Errno 13] Permission denied: '/celerybeat.pid'

Irgendwelche Ideen, wie man das lösen kann?

16voto

sanchitarora Punkte 872

Das Problem ist, dass Sie kein Verzeichnis in der Konfigurationsdatei angegeben haben und das Standardverzeichnis dann '/' (Root) ist, für das Ihr Benutzer keine Schreibberechtigungen hat.

Das Setzen des Benutzers als Root hat Ihr Problem gelöst, da Sie nun die Berechtigung hatten, in '/' zu schreiben, jedoch ist dies möglicherweise nicht die beste Lösung. Es gibt mehrere Möglichkeiten, dies zu lösen, indem Sie Folgendes einschließen:

  1. Fügen Sie eine Verzeichnisvariable in der Konfiguration hinzu und geben Sie einen Pfad an, für den Ihr Benutzer Schreibberechtigungen hat.

    directory=
  2. Geben Sie ein pidfile-Argument an den Celery-Befehl, den Sie zum Starten von Celery verwenden. Stellen Sie sicher, dass Sie Schreibberechtigungen für den von Ihnen angegebenen Pfad haben, der für das pidfile spezifiziert ist.

    command=/path/app/env/bin/celery beat -A project.tasks --loglevel=INFO --pidfile=/tmp/celerybeat-myapp.pid

1voto

Artem Mezhenin Punkte 5461

Hier ist meine (funktionierende) Version für Celere Beat:

[program:celery_periodic]
command=/bin/python /manage.py celery worker --loglevel=info -c 1 -E -B -Q celery_periodic -f /celery_periodic.log -n periodic_worker
directory=
user=
group=
autostart=true
autorestart=true
redirect_stderr=True
daemon = False
debug = False
stdout_logfile = NONE
stderr_logfile = NONE
loglevel = "info"

Vielleicht hilft das.

Überprüfen Sie auch die Berechtigungen im Ordner, in dem Sie die PID-Datei erstellen.

0voto

Gr1N Punkte 1235

Ich löse mein Problem, indem ich Benutzer=root setze, aber ich denke, das ist ein schlechter Weg...

0voto

Grae Punkte 1

Ich bin auf ein ähnliches Problem gestoßen. Es wurde durch Ändern von 2 Einstellungen behoben:

  1. wie oben erwähnt: Hinzufügen von --pidfile=/tmp/celerybeat-myapp.pid
  2. user = "ein tatsächlicher Nicht-Root-Benutzer"

Das in einigen Dokumentationen bereitgestellte Standard-"user = nobody" scheint zusätzliche Berechtigungsfehler mit celerybeat.conf zu verursachen (nicht jedoch in celery.conf).

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X