Wie man Zeitstempel hinzufügt, während stdout zu Datei in Bash umadressiert?
Ich habe ein Programm (server) und ich Suche eine Möglichkeit (script), redirect (oder besser duplizieren) alle seine stdout
auf Datei, und fügen Sie die Zeitmarke für jeden Eintrag.
Ich habe einige der Forschung getan und die am weitesten, die ich bekommen konnte, war Dank Gewusst wie: hinzufügen von Zeitstempel, um die STDERR-Umleitung. Es leitet stdout
aber der Zeitstempel Hinzugefügt ist die Zeit, wenn das Skript beendet:
#!/bin/bash
./server | ./predate.sh > log.txt
code von predate.sh
:
#!/bin/bash
while read line ; do
echo "$(date): ${line}"
done
Scheint es, dass die server-Ausgabe geleert wird, nach beenden des Programms.(ohne Umleitung funktioniert es einwandfrei). Auch wenn ich versuche über predate.sh
auf gegebene Beispiel im thread erwähnt, es funktioniert perfekt. Ich bin mir bewusst, dass es einfach wäre das hinzufügen eines Zeitstempels zu den wichtigsten Programmen, aber ich würde eher vermeiden die Bearbeitung des Codes.
InformationsquelleAutor der Frage wondra | 2014-01-13
Du musst angemeldet sein, um einen Kommentar abzugeben.
Vor kurzem musste ich genau das: Sie erhalten von log-Meldungen in eine serielle Konsole (picocom), drucken Sie Sie zu einem terminal und in einer Datei, UND stellen Sie das Datum ein.
Was ich nun verwenden, sieht s.th. wie diese:
picocom
ist anawk
awk
stellt das Datum (der%s
option wandelt die Zeit in die Anzahl der Sekunden seit 1970-01-01 00:00:00 UTC - oder verwenden Sie%c
für einen Menschen-lesbaren format)fflush()
spült jede gepufferte Ausgabe inawk
tee
die lenkt es in eine Datei. (Sie finden ein paar Sachen übertee
hier)InformationsquelleAutor der Antwort oliver
Mir Dein Code funktioniert einwandfrei
Überprüfen, das ist, was ich versucht habe
test.sh
predate.sh
dann
gibt mir
Diese umgeleitet werden kann, um eine Datei mit ">" oder ">>" append
InformationsquelleAutor der Antwort Ashish
moreutils
ts
ts
können auch deltas aus der box für benchmarking: Wie zu überwachen, wie viel Zeit jede Zeile von stdout war der Letzte output-Zeile in der Bash für das benchmarking?InformationsquelleAutor der Antwort Ciro Santilli 新疆改造中心 六四事件 法轮功
Wenn ich dein problem verstanden ist, um die stderr-Ausgabe in Ihrem log.txt Datei. Richtig ?
Wenn es das ist, was Sie wollen, die Lösung ist:
./server 2>&1 | ./predate.sh > log.txt
Hinsichtlich
InformationsquelleAutor der Antwort HelpBox
Ich bin mit oben genannten Beispiel:
picocom -b 115200 /dev/tty.usbserial-1a122C | awk '{ print strftime("%s: "), $0; fflush(); }' | tee serial.txt
dump/redirect telnet Ausgabe von Daten in eine log-Datei, aber ich bin nicht in der Lage zu laufen, mein Skript in den hintergrund. Wenn ich '&', um es zu laufen im hintergrund, dann funktioniert es nicht.
Punkt#1:Arbeits-Befehl ohne '&':
Skript: dumpper.sh
telnet $1 $2 | awk '{ print strftime("%s: "), $0;}' | tee $host.$port.melden;
Befehl aus: ./dumpper.sh 16.1.1.8 202
Punkt#1:Funktioniert Nicht-Befehl mit '&':
Skript: dumpper.sh
telnet $1 $2 | awk '{ print strftime("%s: "), $0;}' | tee $host.$port.log 2>&1;
Befehl aus: ./dumpper.sh 16.1.1.8 20224 &
InformationsquelleAutor der Antwort vicky
Ich bin mit einen cron job wie diesen:
Dann in script.sh ich habe so etwas wie dieses:
Seit "Datum" ist Teil stdout meiner script.sh der timestamp ist die erste Zeile in jeder Ausgabe auf stdout.log-Eintrag.
InformationsquelleAutor der Antwort acetone