Przełożony zawsze kończy proces z „statusem wyjścia 0; nie oczekiwany'

13

Obecnie przebudowuję swoje vps i chciałbym użyć opiekuna do zarządzania moimi procesami gunicorn / wsgi django. Rzecz w tym, że przełożony opuszcza procesy:

2010-07-23 14:54:40,575 INFO supervisord started with pid 31391
2010-07-23 14:54:41,582 INFO spawned: 'projectx' with pid 31395
2010-07-23 14:54:41,691 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:42,695 INFO spawned: 'projectx' with pid 31401
2010-07-23 14:54:42,801 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:44,806 INFO spawned: 'projectx' with pid 31404
2010-07-23 14:54:44,912 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:47,917 INFO spawned: 'projectx' with pid 31408
2010-07-23 14:54:48,022 INFO exited: projectx (exit status 0; not expected)
2010-07-23 14:54:49,023 INFO gave up: projectx entered FATAL state, too many start retries too quickly

Oto konfiguracja, której używam:

[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
user=myuser
autostart=true
autorestart=true

Już dwukrotnie sprawdziłem, a gunicorn_django zwraca status 0, gdy jest poprawnie spawnowany.

Próbowałem dodać kody zakończenia = 0,2 jawnie do konfiguracji, ale to też nie wydaje się mieć znaczenia. Wygląda na to, że proces został zaszczepiony poprawnie, ale przełożony uważa, że ​​nie.

Czy ktoś ma jakiś pomysł, jak to rozwiązać?

Dzięki, Bjorn

Bjorn
źródło

Odpowiedzi:

12

Jeśli gunicorn_django sam się demonizuje, nie jest to rodzaj nadzorcy programu do zarządzania. Przełożony oczekuje, że nadzorowane programy będą działać na pierwszym planie, aby mógł monitorować, czy zostały zakończone.

Zobacz dokumenty superwizora .

Drew Bloechl
źródło
gunicorn domyślnie nie deamonizuje się, ale ustawiłem go w moim pliku konfiguracyjnym. Usunąłem go, dzięki za zwrócenie na to uwagi.
Bjorn,
4

Ok, po kilku zagadkach zorientowałem się, że ma to coś wspólnego z użytkownikami. Próbowałem uruchomić moje procesy potomne jako określony użytkownik. Po usunięciu linii (zobacz moją konfigurację poniżej) wszystko działa dobrze.

Konfiguracja Gunicorn:

bind = "127.0.0.1:3305"
workers = 2

Konfiguracja nadzorcy:

[program:projectx]
command=/path/to/project/bin/gunicorn_django -c /path/to/project/project/gunicorn.conf.py /path/to/project/project/production.py
; set the user here instead of in the gunicorn config.
user=user
autostart=true
autorestart=unexpected
stdout_logfile=/path/to/project/logs/project.log
redirect_stderr=true
exitcodes=1
Bjorn
źródło
1
Krótka uwaga, że ​​jeśli chcesz to wcielić w życie, skorzystaj z usług myuser i uruchomionego gunicornu. Zwykłymi podejrzanymi są pliki dziennika i pid, których nie można zapisać. Alternatywnie Twoja aplikacja może również wymagać uprawnień do plików. I tylko krótka uwaga, że ​​dla lepszego wsparcia przełożonego powinieneś uaktualnić do wersji 0.10, ponieważ naprawiliśmy problem z ponownym uruchomieniem gunicorn przez superwizję (lub runit w tym przypadku).
Paul J. Davis,
0

Wystąpił podobny błąd podczas próby uruchomienia demona http pod nadzorem.

Naprawiono przez usunięcie starego pliku pid: httpd_pid

polowanie na kaczki
źródło