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.
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
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
:Das Protokollverzeichnis muss vorhanden sein, sonst verweigert
supervisord
den Start. Erstellen Sie das Protokollverzeichnis und starten Siesupervisord
im Vordergrund mit dieser Konfiguration:Entfernen Sie das Protokollverzeichnis, während
supervisord
noch ausgeführt wird:Versuchen Sie, den Vorgang zu starten: