Ich verwende Supervisord, um ein PHP-Programm zu verwalten, das im Hintergrund ausgeführt werden muss. Dieses Programm protokolliert Ereignisse in einer Datei worker_log
. Es ist einfach genug, dies zu konfigurieren, in den supervisord.conf
Ich verwende:Timestamping-Protokolle von Programmen, die von supervisord verwaltet werden
stderr_logfile=/var/log/supervisord/worker_log;
aber ich mag für die Ereignisse in das Protokoll geschrieben werden, sich zu einem Zeitstempel. Ich habe keine Kontrolle über das PHP-Programm, also dekorieren es ist keine Option. Ich dachte mir, dass das, was ich tun würde, ist die obige Protokollkonfiguration kommentieren und das Programm über Kommandozeilenleitungen in der Supervisor Befehl Konfiguration dekorieren:
command=php /www/myapp/worker.php 2>&1 | sed "s/^/`date` /" > /var/log/supervisord/worker_log;
Wenn dieser Befehl ausgeführt wird manuell es scheint gut zu funktionieren. Allerdings scheint Supervisord irgendwie zu verhindern, dass es richtig funktioniert, und ich kann nicht sagen, wie. worker.php
funktioniert gut, aber die Berichterstattung wird in dieser Konfiguration unterdrückt. Aus diesem Grund wird der Zeitstempel natürlich nicht hinzugefügt.
Weiß jemand genug darüber, um eine Anleitung zu geben, wie das Ziel der Zeitstempelung der Arbeit des Arbeiters erreicht werden kann?
Ist ist es wahrscheinlich, dass der Befehlsparameter keine Pipe unterstützt? Oder kann der Befehl sein, wenn run das Terminal freigibt, welches Supervisord nicht unterstützt? –