Supervisor: Supervisor 3.3.1: CRIT nicht erfasste Python-Ausnahme, Kanal wird geschlossen

Erstellt am 17. Mai 2017  ·  4Kommentare  ·  Quelle: Supervisor/supervisor

Wir haben immer noch das Problem, dass der Supervisor bei jeder Protokollnachricht, die beim Weiterleiten von Protokollen an /dev/stdout erzeugt wird, einen CRIT nicht erfasst protokolliert, ähnlich wie hier:

2017-05-17 12:20:27,860 CRIT uncaptured python exception, closing channel <POutputDispatcher at 140178721855392 for <Subprocess at 140178721855248 with name cause-error in state STARTING> (stdout)> (<type 'exceptions.IOError'>:[Errno 29] Illegal seek [/usr/local/lib/python2.7/dist-packages/supervisor/supervisord.py|runforever|227] [/usr/local/lib/python2.7/dist-packages/supervisor/dispatchers.py|handle_read_event|232] [/usr/local/lib/python2.7/dist-packages/supervisor/dispatchers.py|record_output|166] [/usr/local/lib/python2.7/dist-packages/supervisor/dispatchers.py|_log|142] [/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|info|275] [/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|log|293] [/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|emit|186] [/usr/local/lib/python2.7/dist-packages/supervisor/loggers.py|doRollover|211])

Dies sieht ähnlich aus wie #638, ist aber mit 3.3.1 immer noch vorhanden und hat einen anderen Stack-Trace.

Ich habe ein minimales Dockerfile erstellt, das das Problem auf meiner Seite reproduzierbar verursachen wird: https://gist.github.com/madmuffin1/33408001a402c2fd98bc0b227185b363

Wenn Sie weitere Details benötigen, lassen Sie es mich wissen, ich helfe Ihnen gerne weiter.

logging

Hilfreichster Kommentar

Ein spätes Dankeschön an @mnaberez!

Wenn jemand wie ich über diesen Fehler stolpert, beachten Sie, dass die genannten Optionen für den Abschnitt [supervisord] gelten, innerhalb der Abschnitte [program:x] müssen Sie stdout_logfile_maxbytes = 0 und/oder stderr_logfile_maxbytes = 0 verwenden

Alle 4 Kommentare

Beim weiteren Studium der Dokumentation habe ich festgestellt, dass es redirect_stdout und redirect_stderr gibt, was wie erwartet funktioniert. Daher sollte dieses Problem wahrscheinlich verhindert werden, indem eine hilfreichere Fehlermeldung generiert wird.

Die obige Protokollmeldung zeigt, dass während der Protokollrotation ein illegaler Suchfehler aufgetreten ist.

Ihre Konfigurationsdatei ist diese:

RUN apt-get update && apt-get install -y -q locales python-pip && pip install supervisor && \
echo "[supervisord]nnodaemon=truenn[program:cause-error]ncommand=/bin/bash -c 'echo Test'nstdout_logfile=/dev/stdout" > /etc/supervisord.conf

Diese Konfiguration verwendet die Protokollrotation (standardmäßig aktiviert), aber Sie haben eine Protokolldatei angegeben, die nicht durchsucht werden kann:

stdout_logfile=/dev/stdout

Wenn Sie wirklich stdout verwenden möchten, kann es funktionieren, aber Sie müssen mindestens die Protokollrotation deaktivieren (set stdout_maxbytes=0 ( Configuration ).

Beim weiteren Studium der Dokumentation habe ich herausgefunden, dass es forward_stdout und redirect_stderr gibt, die wie erwartet funktionieren.

Es gibt keine redirect_stdout -Option, und redirect_stderr wird dies nicht beeinflussen. Die Option redirect_stderr bewirkt, dass supervisord stderr in derselben Datei wie stdout protokolliert. Der Fehler wird weiterhin angezeigt, wenn Sie die Protokolldatei nicht in eine durchsuchbare Datei ändern oder die Rotation deaktivieren.

Ein spätes Dankeschön an @mnaberez!

Wenn jemand wie ich über diesen Fehler stolpert, beachten Sie, dass die genannten Optionen für den Abschnitt [supervisord] gelten, innerhalb der Abschnitte [program:x] müssen Sie stdout_logfile_maxbytes = 0 und/oder stderr_logfile_maxbytes = 0 verwenden

Ich habe so etwas gemacht:

stdout_logfile=/dev/stdout
stderr_logfile=/dev/stderr
stdout_maxbytes=0
stderr_maxbytes=0
stdout_logfile_maxbytes = 0
stderr_logfile_maxbytes = 0

War diese Seite hilfreich?
0 / 5 - 0 Bewertungen