2010-12-02 7 views

Antwort

43
tail -fn0 logfile | \ 
while read line ; do 
     echo "$line" | grep "pattern" 
     if [ $? = 0 ] 
     then 
       ... do something ... 
     fi 
done 
+2

oh, eine weitere Sache, die 'Schwanz -fn0 logfile' scheint da der HTTP-Server Log-Datei schnell umbenannt und gzip'ed verfallen werden. Das Skript überwacht immer noch den alten Dateideskriptor, denke ich? Gibt es eine Möglichkeit, Datei-Inode oder etwas nach einer gewissen Zeit für den "Schwanz" -Befehl automatisch zu aktualisieren? – est

+9

Fügen Sie einfach einen --retry zum Tail-Befehl hinzu oder verwenden Sie -F anstelle von -f. Das sollte es tun. – Zizzencs

+1

Beachten Sie auch 'grep -q', um den Rückgabecode ohne Anzeige der übereinstimmenden Zeilen festzulegen. –

12

Ich fand auch, dass Sie awk für Muster überwachen können und eine Aktion durchführen, wenn Muster gefunden wird:

tail -fn0 logfile | awk '/pattern/ { print | "command" }' 

Dies wird Befehl ausgeführt wird, wenn Muster im Protokoll gefunden wird. Der Befehl kann ein beliebiger Unix-Befehl sein, einschließlich Shell-Skripten oder irgendetwas anderem.

3

Ein noch robusterer Ansatz ist monit. Dieses Tool kann sehr viele Dinge überwachen, aber einer von ihnen ist, dass es einfach ein oder mehrere Logs beenden kann, mit Regex übereinstimmen und dann ein Skript auslösen wird. Dies ist besonders nützlich, wenn Sie mehrere Protokolldateien überwachen oder mehr als ein Ereignis auslösen müssen.

0

Simple Automated Solution that covers a lot of scenarios:

ANWENDUNG:

logrobot localhost [default-dir],fixer,[exit-codes],[command/script-to-run-per-exit-code] [feature] [logfile] [age] [str-1] [str-2] [WARN] [CRIT] [tag] [option] 

Beispiel:

logrobot localhost /tmp/logXray,fixer,0y-1y-2y,0-uname,1-who,2-uptime autonda /var/log/kern.log 60m 'error' '.' 1 2 app_err_monitor -ndshow 

Mit diesem Tool können Sie bestimmte Muster in einer Protokolldatei überwachen und lösen dann einen Befehl oder Skript, wenn die Muster gefunden werden ... oder NICHT gefunden!

Die Skripts oder Befehle können so eingestellt werden, dass sie auf Basis von Schwellenwerten und Exit-Codes ausgeführt werden.

Werkzeug kann direkt here heruntergeladen werden.

1

Batter und einfach:

tail -f log.txt | egrep -m 1 "error" 
echo "Found error, do sth." 
... 
+1

Vielen Dank für dieses Code-Snippet, das Ihnen sofortige Hilfe bieten kann. Eine richtige Erklärung [würde erheblich verbessern] (// meta.stackexchange.com/q/114762) ihren pädagogischen Wert, indem sie * warum * dies eine gute Lösung für das Problem ist, und es für zukünftige Leser mit ähnlichen, nützlicher machen würde, aber nicht identisch, Fragen. Bitte [bearbeiten] Sie Ihre Antwort, um eine Erläuterung hinzuzufügen und geben Sie an, welche Einschränkungen und Annahmen gelten. –