De toutes les réponses, j'ai retenu la tienne : facile et rapide à mettre en oeuvre.
J'ai fait un script bash lancé via la incrontab. Le script n'est pas parfait mais c'est suffisamment fonctionnel.
Je le met ici, ça peut servir à d'autres. Je suis bien évidement ouverts au remarques.
Merci à tous !
#!/bin/bash
# Le script est appelé pour chaque ligne modifiée
# Il faut eviter de lancer les actions de multiples fois
# On enregistre le PID du script en cours dans un fichier et on attend
# On compare ensuite le PID courant avec celui enregistré dans le fichier :
# Le dernier script lancé sera celui qui sera exécuté
echo -n "$$" > /tmp/watch-myprocess.pid
sleep 5
pidAllowed=`cat /tmp/watch-myprocess.pid`
if [[ $$ -ne $pidAllowed ]]
then
exit 0
fi
# Définition du fichier à interroger & de la date du jour en anglais (elle est en anglais dans les logs).
file="/var/log/apache2/error.log"
today=`oldLANG=$LANG;LANG=en_EN.UTF-8;date '+%a %b %d';LANG=$oldLANG`
# Définition des destinataires du mail et de son contenu
mailTo="root"
mailSubject="TRES URGENT : anytermd semble etre en erreur"
mailMessage="
Bonjour,
Le service xxx est encore hs, merci de faire le necessaire.
Attention :
Vous risquez de recevoir d'autres messages de ce type dans la journee malgres le bon fonctionnement du service : ne plus en tenir compte.
Extrait des logs de $file qui ont genere ce message :
"
# Mots clés à rechercher dans les logs
errorToFind[1]="\(20014\)Internal error: proxy: error reading status line from remote server localhost, referer: https://xxx"
errorToFind[2]="\(111\)Connection refused: proxy: HTTP: attempt to connect to [::1]:8888 \(localhost\) failed"
errorToFind[3]="ap_proxy_connect_backend disabling worker for \(localhost\)"
errorToFind[4]="proxy: HTTP: disabled connection for \(localhost\)"
# La recherche
sendMail=0 # initialisation d'une variable afin de na pas envoyer de mail quand ce n'est pas utile
while read line ; do
for (( index=1; index<=${#errorToFind[@]} ; index++))
do
if [[ $line =~ $today.*${errorToFind[$index]} ]]
then
mailMessage="$mailMessage$line
"
sendMail=$sendMail"1"
fi
done
done < $file
# Envoi d'un email uniquement si un des mots clé a été trouvé
if [[ $sendMail -ne 0 ]]
then
echo "$mailMessage" | mail -s "$mailSubject" $mailTo
fi
[^] # Re: inotify
Posté par mekare . En réponse au message Apache : exécuter un script après qu'une erreur ait été enregistrée dans error.log. Évalué à 2.
De toutes les réponses, j'ai retenu la tienne : facile et rapide à mettre en oeuvre.
J'ai fait un script bash lancé via la incrontab. Le script n'est pas parfait mais c'est suffisamment fonctionnel.
Je le met ici, ça peut servir à d'autres. Je suis bien évidement ouverts au remarques.
Merci à tous !