Lösung 1:
pv
ist dein Befehl! P ipe V iewer gibt Statistiken über die durchlaufenden Daten aus und kann überall in Ihrer Pipeline ausgeführt werden, da es stdin direkt an stdout weiterleitet. Zum Beispiel:
tail -f /var/log/nginx/access.log | pv --line-mode --rate > /dev/null
Die pv
Der Befehl gibt an stderr die aktuelle Anzahl von Zeilen pro Sekunde aus (der Standardwert ist Bytes pro Sekunde), was für diese bestimmte Datenquelle (die Standardprotokolldatei von Nginx) den eingehenden Webanforderungen pro Sekunde entspricht. Ich interessiere mich nur für die Anzahl, also leite ich stdout in /dev/null
. Es gibt auch Optionen wie:
-b
(Gesamtzahl der Zeilen),--average-rate
(Durchschnittsrate seit Beginn) und--timer
(verfolgt, wie lange das Rohr läuft).
Wenn Sie nicht --line-mode
sagen , es zählt Bytes, was wahrscheinlich nicht das ist, was Sie für Serverprotokolle wollen, aber an anderer Stelle nützlich sein könnte.
Schlussbemerkung:... | pv -lb > file.txt
ist sehr ähnlich wie ... | tee file.txt | awk '{printf "\r%lu", NR}'
, was auch zum Zählen von Zeilen praktisch ist, aber die pv
Der Aufruf ist viel kürzer, obwohl die Ausgabe nicht ganz so aufregend ist – pv
wird standardmäßig jede Sekunde aktualisiert, während awk
Befehl wird kontinuierlich aktualisiert.
Lösung 2:
Vielleicht sollten Sie es mit logtop
versuchen ?
tail -f foobar.log |logtop
Lösung 3:
watch -n 3 "wc -l logfile"
Manpage
watch - führt ein Programm regelmäßig aus und zeigt die Ausgabe im Vollbildmodus Standardmäßig wird das Programm alle 2 Sekunden ausgeführt; Verwenden Sie -n oder --interval, um ein anderes Intervall anzugeben.