• [^] # Re: inotify

    Posté par . 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 !

    #!/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