Ergebnis 1 bis 6 von 6
  1. #1
    stk
    stk ist offline
    Lohrer Rambour
    Themenstarter
    Avatar von stk
    Registriert
    01.2004
    Beiträge
    6.884

    Frage 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 wie
    Code:
    "fixer Text voran "(.*?)" fixer Text hintennach"
    zu lösen. Die Ausgabe wiederum soll über growlnotify bereitgestellt werden, also etwa
    Code:
    growlnotify -m "anderer fixer Text voran "\1" anderer fixer Text hinten nach"
    Für sachdienliche Hinweise zur Lösung der Aufgabe wird Euch mein Dank ewig nachschleichen.

    Gruß Stefan
    Wenn 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!

  2. #2
    Seestermüher Zitronenapfel
    Registriert
    11.2006
    Ort
    Ruhrgebiet und Niederrhein
    Beiträge
    6.085
    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.
    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/RTFM
    Bei der Lösungssuche: selbst mitdenken hilft auch.
    Welle:Erdball - Nur tote Frauen sind schön - Lieber Gott


  3. #3
    Rhode Island Greening Avatar von Steinchen
    Registriert
    04.2010
    Ort
    Saarland
    Beiträge
    472
    Hi,


    tail -f /path/to/file | while read line; do

    # dein kram hier

    echo $line;

    done
    Kannste ganz leicht testen:

    Zwei Shells, erste Shell:

    $ echo test > testfile
    $
    zweite Shell:

    $ tail -f testfile | while read line; do echo $line; done
    test
    erste Shell:

    $ echo test > testfile
    $
    $ echo bleh >> testfile
    $
    zweite Shell:

    $ tail -f testfile | while read line; do echo $line; done
    test
    bleh
    Einziger Haken:

    Der Kram muss mit ner Newline gelogged werden. Keine Newline, kein "Event".

    Aber das sollte es jetzt echt nicht sein

    cu
    They have this game where you put in a dollar and win four quarters! I win every time!

  4. #4
    stk
    stk ist offline
    Lohrer Rambour
    Themenstarter
    Avatar von stk
    Registriert
    01.2004
    Beiträge
    6.884
    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ß Stefan
    Wenn 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!

  5. #5
    Rhode Island Greening Avatar von Steinchen
    Registriert
    04.2010
    Ort
    Saarland
    Beiträge
    472
    Hi,

    Code:
    tail -f /path/to/file | while read line; do 
     
    [ $( echo $line | grep -e '.*really.*nasty.*regex.*here.*') ] && echo found
     
    done
    oder die "Lang-version":

    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
    Was NICHT geht:

    Code:
    tail -f /path/to/file | grep -e '.*really.*nasty.*' | ....
    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.

    cu
    They have this game where you put in a dollar and win four quarters! I win every time!

  6. #6
    stk
    stk ist offline
    Lohrer Rambour
    Themenstarter
    Avatar von stk
    Registriert
    01.2004
    Beiträge
    6.884
    Zitat Zitat von Steinchen Beitrag anzeigen
    Was NICHT geht:

    Code:
    tail -f /path/to/file | grep -e '.*really.*nasty.*' | ....
    Danke genau da bin ich hängen geblieben
    Wenn 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!

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •