2010-12-02 20 views

Répondre

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

oh, une chose, la 'queue -fn0 logfile' semble être fin puisque le fichier journal du serveur HTTP sont rapidement renommé et gzip. Le script est toujours surveiller l'ancien descripteur de fichier, je pense? Est-il possible de mettre à jour automatiquement le fichier inode ou quelque chose après une période de temps pour la commande 'tail'? – est

+9

Ajoutez simplement --retry à la commande tail, ou utilisez -F au lieu de -f. Ça devrait le faire. – Zizzencs

+1

Considérez également 'grep -q' pour définir le code de retour sans afficher les lignes correspondantes. –

12

J'ai aussi trouvé que vous pouvez utiliser awk pour surveiller modèle et effectuer une action lorsque modèle se trouve:

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

Cela exécutera la commande lorsque modèle se trouve dans le journal. La commande peut être n'importe quelle commande d'Unix comprenant des manuscrits de coquille ou n'importe quoi d'autre.

3

Une approche encore plus robuste est monit. Cet outil peut surveiller un très grand nombre de choses, mais l'une d'entre elles est qu'il finira facilement un ou plusieurs journaux, se comparera avec la regex, puis déclenchera un script. Ceci est particulièrement utile si vous disposez d'une collection de fichiers journaux à surveiller ou de plusieurs événements à déclencher.

0

Simple Automated Solution that covers a lot of scenarios:

USAGES:

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] 

Exemple:

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 

Avec cet outil, vous pouvez suivre des modèles spécifiques dans un fichier journal, puis déclencher une commande ou script lorsque les motifs sont trouvés ... ou non trouvé!

Les scripts ou les commandes peuvent être configurés pour s'exécuter en fonction des seuils et des codes de sortie.

L'outil peut être téléchargé directement here.

1

Batter et simple:

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

Merci pour cet extrait de code, qui peut fournir une aide immédiate. Une explication appropriée [améliorerait considérablement] (// meta.stackexchange.com/q/114762) sa valeur éducative en montrant * pourquoi * ceci est une bonne solution au problème, et le rendrait plus utile aux futurs lecteurs avec des semblables, mais pas identique, des questions. S'il vous plaît [modifier] votre réponse pour ajouter une explication, et donner une indication des limites et des hypothèses qui s'appliquent. –