Hallo Liste,
wie kann ich mir die Log-Einträge der vergangenen 60 Minuten anzeigen lassen. Die Zeilen der Protokolldatei fangen z.B. mit "2011-01-11 16:17:48,542 INFO ..." an. Bisher habe ich mir mit 'date' die letzte Stunde ausgeben lassen und die Minuten verworfen. Jedoch ist mir das zu ungenau.
Viele Grüße
Björn
Björn Abheiden b.abheiden@ba-webdesign.com (Di 11 Jan 2011 16:22:35 CET):
Hallo Liste,
wie kann ich mir die Log-Einträge der vergangenen 60 Minuten anzeigen lassen. Die Zeilen der Protokolldatei fangen z.B. mit "2011-01-11 16:17:48,542 INFO ..." an. Bisher habe ich mir mit 'date' die letzte Stunde ausgeben lassen und die Minuten verworfen. Jedoch ist mir das zu ungenau.
In Shell? Nicht ausgiebig getestet.
#! /bin/bash time0=`date +%s -d 'now - 1 hour'`
{ while read; do test $(date +%s -d "${REPLY:0:16}") -ge $time0 \ && break done; cat } </var/log/syslog
Hallo Heiko,
Das schaut gut aus. Ja, ich wollte es für die Shell. Du meintest sicherlich "while read REPLY; do". Da hatte ich mich erst doch einen Moment drüber gewundert. Ich werde es später mal ausprobieren.
Gruß
Björn
Am 11.01.2011 16:45, schrieb Heiko Schlittermann:
Björn Abheiden b.abheiden@ba-webdesign.com (Di 11 Jan 2011 16:22:35 CET):
Hallo Liste,
wie kann ich mir die Log-Einträge der vergangenen 60 Minuten anzeigen lassen. Die Zeilen der Protokolldatei fangen z.B. mit "2011-01-11 16:17:48,542 INFO ..." an. Bisher habe ich mir mit 'date' die letzte Stunde ausgeben lassen und die Minuten verworfen. Jedoch ist mir das zu ungenau.
In Shell? Nicht ausgiebig getestet.
#! /bin/bash time0=`date +%s -d 'now - 1 hour'` { while read; do test $(date +%s -d "${REPLY:0:16}") -ge $time0 \ && break done; cat } </var/log/syslog
Björn Abheiden b.abheiden@ba-webdesign.com (Di 11 Jan 2011 17:23:44 CET):
Hallo Heiko,
Das schaut gut aus. Ja, ich wollte es für die Shell. Du meintest sicherlich "while read REPLY; do". Da hatte ich mich erst doch einen Moment drüber gewundert. Ich werde es später mal ausprobieren.
Nein, ich meinte „while read; do …“. Es gibt einen kleinen subtilen Unterschied zwischen „read“ und „read NAME“.
read … [NAME ...]
The line is split into fields as with word splitting, and the first word is assigned to the first NAME, the second word to the second NAME, and so on, with any leftover words assigned to the last NAME. … If no NAMEs are supplied, the line read is stored in the REPLY variable.
echo " a b c " | { read REPLY; echo ".$REPLY."; } echo " a b c " | { read ; echo ".$REPLY."; }
Heiko Schlittermann hs@schlittermann.de (Di 11 Jan 2011 16:45:17 CET):
Björn Abheiden b.abheiden@ba-webdesign.com (Di 11 Jan 2011 16:22:35 CET):
Hallo Liste,
wie kann ich mir die Log-Einträge der vergangenen 60 Minuten anzeigen lassen. Die Zeilen der Protokolldatei fangen z.B. mit "2011-01-11 16:17:48,542 INFO ..." an. Bisher habe ich mir mit 'date' die letzte Stunde ausgeben lassen und die Minuten verworfen. Jedoch ist mir das zu ungenau.
In Shell?
Alternativ (das würde sogar bei vielen Logfiles nur die passenden Zeilen raussuchen):
#! /usr/bin/perl use strict; use warnings; use Date::Parse;
my $time0 = time - 3600;
while (<>) { next if not /^(\S+\s+\d?\d\s+\d?\d:\d\d:\d\d)\s/; next if str2time($_) < $time0; print; }
Wenn es nur ein (Singular) Logfile wäre, dann vielleicht analog zur Logik im Shellscript:
#! /usr/bin/perl use strict; use warnings; use Date::Parse; die "Please use STDIN or only one file name!" if @ARGV > 1; my $time0 = time - 3600; while (<>) { last if /^(…)/ and str2time($1) >= 0; } print while <>;
lug-dd@mailman.schlittermann.de