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 Schreibrechte hat.

Die Einstellung des Benutzers als root hat Ihr Problem gelöst, da Sie nun Schreibrechte für '/' hatten, jedoch ist dies möglicherweise nicht die beste Lösung. Es gibt mehrere Möglichkeiten, dies zu lösen, darunter:

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

    directory=
  2. Fügen Sie dem celery-Befehl, mit dem Sie celery starten, ein pidfile-Argument hinzu. Stellen Sie sicher, dass Sie Schreibrechte für den von Ihnen angegebenen pidfile-Pfad haben.

    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 einstelle, aber ich denke, das ist kein guter Weg...

0voto

Grae Punkte 1

Ich bin auf ein ähnliches Problem gestoßen. Es wurde behoben, indem ich 2 Einstellungen geändert habe:

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

Das in einigen Dokumentationen bereitgestellte Standard-"user = nobody" scheint zusätzliche Berechtigungsfehler mit der celerybeat.conf zu verursachen (nicht jedoch in der 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