Es gibt für Perl das Modul File::Tail. Damit sollte es klappen. Die Datei halt in Perl öffnen und mittels regex die Zeile untersuchen. Wenn der Ausdruck vorkommt, solltest du mittels Systemaufruf den String an growl weiterleiten können.
Ergebnis 1 bis 6 von 6
- 30.04.2010, 09:39 #1
Event in einem Logfile abgreifen und an Growl schicken? Moin,
grundsätzlich hab ich schon klar, das sed, awk, tail, grep ggf. auch perl die richtigen Stationen sind, mit denen ich mich auseinander zu setzen habe, scheitere jedoch kläglich an dieser Shellaufgabe:
Ich würde gerne ein logfile auf das Auftreten eines bestimmten Events überwachen. Es ist also kein »historischer« File, der festgemauert im Dateisystem geschlossen in der Ecke liegt, sondern der laufend von seinem Prozess betankt wird. Der Eintrag - wenn er denn vorbeikommt - kann eindeutig über einen regulären Ausdruck bestimmt werden, wobei der variable Teil auch der ist, der anschliessend in die Ausgabe übernommen werden soll.
Sprich: das Auffinden wäre mit einem Ausdruck wiezu lösen. Die Ausgabe wiederum soll über growlnotify bereitgestellt werden, also etwaCode:"fixer Text voran "(.*?)" fixer Text hintennach"
Für sachdienliche Hinweise zur Lösung der Aufgabe wird Euch mein Dank ewig nachschleichen.Code:growlnotify -m "anderer fixer Text voran "\1" anderer fixer Text hinten nach"
Gruß StefanWenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt
auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke
von Todesangst, nicht weit weg von Irrwitz und Idiotie!
- 30.04.2010, 09:47 #2Seestermüher Zitronenapfel
- Registriert
- 11.2006
- Ort
- Ruhrgebiet und Niederrhein
- Beiträge
- 6.085
Viel Technik als Mittel zum Zweck....
23 weis alles, 42 ist die Antwort und 242 steht außer Frage
Ich danke euch allen. Selten so gut gelacht.
Wer Ironie findet, darf sie behalten/RTFMBei der Lösungssuche: selbst mitdenken hilft auch.
Welle:Erdball - Nur tote Frauen sind schön - Lieber Gott
- 30.04.2010, 09:50 #3
Hi,
Kannste ganz leicht testen:
tail -f /path/to/file | while read line; do
# dein kram hier
echo $line;
done
Zwei Shells, erste Shell:
zweite Shell:$ echo test > testfile
$
erste Shell:$ tail -f testfile | while read line; do echo $line; done
test
zweite Shell:$ echo test > testfile
$
$ echo bleh >> testfile
$
Einziger Haken:$ tail -f testfile | while read line; do echo $line; done
test
bleh
Der Kram muss mit ner Newline gelogged werden. Keine Newline, kein "Event".
Aber das sollte es jetzt echt nicht sein
cuThey have this game where you put in a dollar and win four quarters! I win every time!
- 30.04.2010, 12:59 #4
Moin,
ah - das schaut doch schon mal ganz gut aus! An welcher Ecke muß ich da noch den grep reinhängen um nur bestimmte Zeilen geliefert zu bekommen?
Gruß StefanWenn Sie mich suchen, ich halte mich in der Nähe des Wahnsinns auf, genauer gesagt
auf der schmalen Linie zwischen Wahnsinn und Panik, gleich um die Ecke
von Todesangst, nicht weit weg von Irrwitz und Idiotie!
- 30.04.2010, 13:49 #5
Hi,
oder die "Lang-version":Code:tail -f /path/to/file | while read line; do [ $( echo $line | grep -e '.*really.*nasty.*regex.*here.*') ] && echo found done
Was NICHT geht:Code:#!/bin/bash tail -f /path/to/file | while read line; do echo $line | grep -e '.*really.*nasty.*' &> /dev/null if [ $? ]; then echo gugsstu fi done
Da gibts das Problem das es gerne im Puffer irgendwo hängen bleibt bis grep den Kram dann irgendwann mal wieder wegschreibt weil selbiger voll ist. Es kann also durchaus sein das es nicht "zeitnah" geschieht.Code:tail -f /path/to/file | grep -e '.*really.*nasty.*' | ....
cuThey have this game where you put in a dollar and win four quarters! I win every time!
- 30.04.2010, 14:58 #6


Zitieren
