45 votes

Shellscript pour surveiller un fichier journal si le mot-clé se déclenche puis exécuter une commande ?

Existe-t-il un moyen peu coûteux de surveiller un fichier journal tel que tail -f log.txt , puis si quelque chose comme [error] apparaît, exécutez une commande ?

Merci.

63voto

Wesley Rice Points 963
tail -fn0 logfile | \
while read line ; do
        echo "$line" | grep "pattern"
        if [ $? = 0 ]
        then
                ... do something ...
        fi
done

14voto

user420783 Points 121

J'ai également découvert que vous pouvez utiliser awk pour surveiller le motif et effectuer certaines actions lorsqu'un motif est trouvé :

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

Cela exécutera la commande lorsque le motif sera trouvé dans le journal. La commande peut être n'importe quelle commande Unix, y compris des scripts shell ou toute autre chose.

5voto

Ari Maniatis Points 1076

Une approche encore plus robuste est monit . Cet outil peut surveiller de très nombreuses choses, mais l'une d'entre elles est qu'il permet de suivre facilement un ou plusieurs journaux, de les comparer à des expressions régulières, puis de déclencher un script. Ceci est particulièrement utile si vous avez une collection de fichiers journaux à surveiller ou plusieurs événements à déclencher.

2voto

Changbin Du Points 324

Mieux et simple :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X