Logfile Parsen und bei mehreren Einträge Befehl ausführen

Vom einfachen Programm zum fertigen Debian-Paket, Fragen rund um Programmiersprachen, Scripting und Lizenzierung.
Antworten
malba
Beiträge: 2
Registriert: 11.02.2011 10:55:20

Logfile Parsen und bei mehreren Einträge Befehl ausführen

Beitrag von malba » 11.02.2011 11:27:59

Hallo zusammen

Vorab bin neu in der Linuxwelt und versuche mich zur Zeit mit Shell Scripting. Hier ist das Script:

Code: Alles auswählen

#!/bin/bash
#
# Name: checkdb

# Variables
message="Achtung Queue wird nicht mehr abgearbeitet"
date=`/bin/date`
notify=someone@somewhere.com
logfile=/var/log/checkrows.log
logfile2=/mnt/server/alarm.txt
database=mamba
dbuser=mimbari
#
# 
psql_output=`/usr/bin/psql -U $dbuser -d $database -c "select count(*) from queue"`
if [ $? -ne 0 ]
then
echo $date - Es wurde ein Problem festgestellt während der Ausführung des Befehls auf $database on $HOSTNAME >> $logfile
echo "Es wurde ein Problem festgestellt während der Ausführung des Befehls auf $database  $HOSTNAME" | mail -s "ERROR Running queue" $notify
exit -1
else
num_rows=`echo "$psql_output"| head -n 3 | tail -n 1`
fi

if [ $num_rows -gt 2 ]
then
echo "$date - WARNING: $HOSTNAME hat $num_rows Einträge in der queue Tabelle auf $database." | mail -s "$message" $notify
echo $date - WARNING: $HOSTNAME has more than $num_rows  in queue >> $logfile
#echo $date - WARNING: $HOSTNAME has more than $num_rows  in queue >> $logfile2
else
echo $date - $HOSTNAME has $num_rows in generator_queue on $HOSTNAME >> $logfile
fi
Soweit läuft das Prima, die Abfrage und der Output werden per mail versendet und ein Eintrag in das Logfile gemacht was dann so aussieht.

Code: Alles auswählen

Fri Feb 11 10:30:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:31:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:32:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:33:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:34:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:35:01 CET 2011 - WARNING: SERVER has more than 7 in queue
Fri Feb 11 10:36:01 CET 2011 - SERVER has 1 in queue on SERVER
Fri Feb 11 10:37:01 CET 2011 - WARNING: SERVER has more than 7 in queue
Fri Feb 11 10:38:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:39:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:40:01 CET 2011 - SERVER has 1 in queue on SERVER
Fri Feb 11 10:41:01 CET 2011 - WARNING: SERVER has more than 18 in queue
Fri Feb 11 10:42:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:43:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:44:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:45:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:46:01 CET 2011 - WARNING: SERVER has more than 17 in queue
Fri Feb 11 10:47:01 CET 2011 - WARNING: SERVER has more than 25 in queue
Fri Feb 11 10:48:01 CET 2011 - SERVER has 0 in queue on SERVER
Fri Feb 11 10:49:01 CET 2011 - SERVER has 0 in queue on SERVER
Nun möchte ich das Logfile parsen und wenn es mehrere Einträge innerhalb von 30 min. mit Warning findet soll es denn Befehl "rm" auslösen und das queue-file löschen.

Für Hinweise wie ich das lösen kann bin euch dankbar.
Zuletzt geändert von KBDCALLS am 11.02.2011 14:23:40, insgesamt 1-mal geändert.
Grund: Code Tags eingefügt, wegen besserer Lesbarkeit.

newdeb
Beiträge: 134
Registriert: 03.02.2011 11:11:21
Lizenz eigener Beiträge: MIT Lizenz
Wohnort: Frankfurt

Re: Logfile Parsen und bei mehreren Einträge Befehl ausführe

Beitrag von newdeb » 11.02.2011 13:14:01

tail + grep + wc kombinieren, so etwa in der Art:

Code: Alles auswählen

LINES=30
MAX_WARNINGS=5
if (( $(tail -$LINES $logfile | grep WARNING | wc -l) > $MAX_WARNINGS )); then
  # Queue loeschen
  :
fi

malba
Beiträge: 2
Registriert: 11.02.2011 10:55:20

Re: Logfile Parsen und bei mehreren Einträge Befehl ausführe

Beitrag von malba » 11.02.2011 14:20:03

:-D Vielen Dank newdeb, funktoniert :THX: :hail:

Antworten