ich eine Textprotokolldatei haben, das Format wie die folgende istDatum: extra Operand% d‘Fehler
Thread-28689296: Thu Aug 25 15:18:41 2016 [ info ]: xxxxx xxxxxx xxxxx
Deshalb möchte ich cron-Job zu finden, einige bestimmte Fehlermeldungen in den letzten ein paar Minuten laufen. Ich schrieb den folgenden Befehl
awk -vDate=`date +%b %d %H:%M:%S %Y` -vDate2=`date --date="2 minutes ago" +%b %d %H:%M:%S %Y` '$5 > Date && $5 < Date2' /var/log/dummy.log | grep "Fatal"
Im obigen Befehl i Suche nach Nachrichten, die einen Zeitstempel beween Zeit jetzt und vor 2 Minuten mit einem String Fatal
.
Aber ich bekam die folgende Fehler
date: extra operand %d'
Try date --help' for more information.
date: extra operand %d'
Try date --help' for more information.
Wenn ich Datum Befehle ausführen, bekam ich die Ergebnisse wie folgt
date "+%b %d %H:%M:%S %Y"
Aug 25 15:25:01 2016
date --date="2 minutes ago" +"%b %d %H:%M:%S %Y"
Aug 25 15:31:42 2016
So sollten die Datumsbefehle in meinem awk-Skript in Ordnung sein.
Ich möchte auch die gefundenen Fehlermeldungen 2 Minuten in eine Datei umleiten, um als Alarm zu mailen, aber ich bin noch nicht so weit gekommen.
Bitte bitte mich beraten, was in meinem awk-Skript falsch ist. Vielen Dank im Voraus!
Warum in aller Welt würden Sie dies mit Cron verkomplizieren? Hier ist eine Idee; Verwenden Sie Cron, um alle Protokolleinträge zu extrahieren, seit Sie Cron zuletzt ausgeführt haben, und fügen Sie diese Einträge dann in eine einzige Datei ein. Nennen Sie es die "Protokollkopie"! Im Ernst, wenn Sie innerhalb von zwei Minuten nach einem Protokolleintrag eine E-Mail-Benachrichtigung erhalten möchten, verwenden Sie nicht cron. Lassen Sie die Protokolle stattdessen durch einen Daemon (z. B. syslog-ng) leiten, der den Protokolleintrag erstellt und Ihnen eine E-Mail-Warnung sendet. –
Die Protokolle sind nicht in Standard-Syslog, so dass ich nicht syslog-ng verwenden kann. –