Supervisor: Absturz, wenn Log-Verzeichnis nicht existiert

Erstellt am 3. Juli 2015  ·  4Kommentare  ·  Quelle: Supervisor/supervisor

In den Kommentaren zu Ausgabe #120 berichtet:

Ich weiß nicht, ob das im Master-Zweig irgendwie gelöst wurde, aber in Version 3.1.1 hat jemand versehentlich ein Log-Verzeichnis in unserem Server entfernt und der Supervisor hat einfach aufgehört zu arbeiten und alle anderen Programme mitgenommen, nicht nur das mit das Protokollverzeichnis fehlt.

logging

Hilfreichster Kommentar

Behoben in fd22ca89ff353fbe92845e9d2517645e6cf149ac. Dieser Fix wird in Supervisor 3.2 enthalten sein.

Hier erfahren Sie, wie Sie es duplizieren und überprüfen können, ob es behoben ist. Minimal supervisord.conf :

[supervisord]
logfile = /tmp/supervisord.log

[inet_http_server]
port = 127.0.0.1:9001

[supervisorctl]
serverurl = http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

Das Protokollverzeichnis muss vorhanden sein, sonst verweigert supervisord den Start. Erstellen Sie das Protokollverzeichnis und starten Sie supervisord im Vordergrund mit dieser Konfiguration:

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

Entfernen Sie das Protokollverzeichnis, während supervisord noch ausgeführt wird:

$ rmdir /thelogdir

Versuchen Sie, den Vorgang zu starten:

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT

Alle 4 Kommentare

Ich habe dieses Verhalten auch gesehen und mich geärgert. Ich denke, das richtige Verhalten ist, wenn möglich logdir zu erstellen, und es sollte zumindest nicht erlaubt sein, andere Aufgaben abzustürzen

Ich habe dieses Verhalten auch gesehen und mich geärgert.

Wann tritt es auf? Der ursprüngliche Kommentar ist nicht spezifisch. Tritt ein Absturz auf, wenn stdout_logfile in einem [program:x] Abschnitt ein Protokollverzeichnis angibt, das nicht existiert? Welche Supervisor-Version verwenden Sie?

Ich denke, das richtige Verhalten ist, wenn möglich logdir zu erstellen

Ich benutze kein anderes Programm, das ein solches Verhalten hat. supervisord verfügt nicht über genügend Informationen, um automatisch ein Protokollverzeichnis zu erstellen, da es nicht weiß, welcher Benutzer das Verzeichnis besitzen oder welche Berechtigungen es haben sollen. Ich denke, das einzige, was es tun kann, ohne eine Reihe von Optionen für all dies zu erweitern, besteht darin, eine klare Fehlermeldung anzuzeigen, wenn kein Protokollverzeichnis vorhanden ist.

zumindest sollte es nicht erlaubt sein, andere Aufgaben abzustürzen

Ich stimme zu, dass das Hinzufügen eines Abschnitts [program:x] in dem stdout_logfile oder stderr_logfile ein Verzeichnis angibt, das nicht existiert, nicht supervisord abstürzen sollte.

Tritt ein Absturz auf, wenn stdout_logfile in einem Abschnitt [program:x] ein Protokollverzeichnis angibt, das nicht > existiert? Welche Supervisor-Version verwenden Sie?

Jawohl. Irgendein Problem auf 3.1.3 für mich.

Behoben in fd22ca89ff353fbe92845e9d2517645e6cf149ac. Dieser Fix wird in Supervisor 3.2 enthalten sein.

Hier erfahren Sie, wie Sie es duplizieren und überprüfen können, ob es behoben ist. Minimal supervisord.conf :

[supervisord]
logfile = /tmp/supervisord.log

[inet_http_server]
port = 127.0.0.1:9001

[supervisorctl]
serverurl = http://127.0.0.1:9001

[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface

[program:cat]
command = /bin/cat
stdout_logfile = /thelogdir/foo.txt
autostart = false

Das Protokollverzeichnis muss vorhanden sein, sonst verweigert supervisord den Start. Erstellen Sie das Protokollverzeichnis und starten Sie supervisord im Vordergrund mit dieser Konfiguration:

$ mkdir /thelogdir
$ supervisord --version
3.2.0.dev0
$ supervisord -n -c /path/to/supervisord.conf
2015-08-18 14:38:52,503 INFO Increased RLIMIT_NOFILE limit to 1024
2015-08-18 14:38:52,516 INFO RPC interface 'supervisor' initialized
2015-08-18 14:38:52,516 CRIT Server 'inet_http_server' running without any HTTP authentication checking
2015-08-18 14:38:52,516 INFO supervisord started with pid 49508

Entfernen Sie das Protokollverzeichnis, während supervisord noch ausgeführt wird:

$ rmdir /thelogdir

Versuchen Sie, den Vorgang zu starten:

$ supervisorctl -c /path/to/supervisord.conf 
cat                              STOPPED   Not started
supervisor> start cat
cat: ERROR (spawn error)
supervisor> status
cat                              FATAL     unknown error making dispatchers for 'cat': ENOENT
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen

Verwandte Themen

kootenpv picture kootenpv  ·  3Kommentare

cachvico picture cachvico  ·  3Kommentare

alexmnv picture alexmnv  ·  3Kommentare

detailyang picture detailyang  ·  4Kommentare

Siecje picture Siecje  ·  5Kommentare