Leiten Sie STDERR und STDOUT in eine Datei mit Zeitstempel in jeder Zeile um

1366
Dolgsthrasir

Auf meinem CentOS versuche ich, ein PHP-Skript auszuführen, das eine Endlosschleife enthält, um ein paar schicke Sachen zu machen. Es spielt keine Rolle, dass eine Endlosschleife in den meisten Fällen keine exakte Lösung ist, aber für meinen Testfall. Wenn ein Fehler in dieser Schleife auftritt, wird der Fehler in eine Ausgabedatei geschrieben (wie alles in stdout). Das mache ich im Moment.

exec php testfile.php >> output.log 2>&1 

Das funktioniert wie erwartet, aber ich möchte wissen, wann stdout oder stderr etwas in die Datei schreibt, daher brauche ich in jeder Zeile eine Art Zeitstempel.

Ich habe bereits versucht, so etwas wie diese, aber wenn ich es tun, wie erwähnt, gibt es einfach keine Ausgabe überhaupt (ich vermute, es ist wegen der nicht ein einfacher Shell - Skript sein).

Kann jeder echovon testfile.php und jeder Fehler von stderr nach output.log mit einem Zeitstempel in jeder Zeile umgeleitet werden ?

1

1 Antwort auf die Frage

2
Gombai Sándor

Mit gnu awk können Sie jeder Zeile einen formatierten datetime-String voranstellen. Die Pufferung kann jedoch dazu führen, dass einige Zeilen neu angeordnet werden oder die letzten paar Zeilen verschwinden. Um dies zu vermeiden, wird die Verwendung von stdbuf empfohlen.

stdbuf -i0 -o0 php testfile.php 2>&1 | gawk '' >> output.log 
Das scheint zu funktionieren, wenn die testfile.php nur etwas enthält wie "echo" Test ";`. Es wird jedoch nichts in die Ausgabedatei geschrieben, wenn sich dieses "Echo" innerhalb der Endlosschleife befindet. Könnte es sein, dass wegen dieser Schleife und der Ausführung nie eine Ausgabe beendet wird, wird keine Ausgabe geschrieben. Dolgsthrasir vor 8 Jahren 0
Keine Ausgabe vielleicht. Ich habe es jetzt mit unendlichem Echo überprüft und sieht gut aus. Gombai Sándor vor 8 Jahren 0