IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Linux Discussion :

Redirection des erreurs des crons


Sujet :

Linux

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut Redirection des erreurs des crons
    Bonjour à tous,

    Je cherche pouvoir envoyer une alerte "warning" à un système de supervision, à chaque fois que stderr vaut quelque chose, différent de null

    Je m'explique mieux:
    J'ai cette crontab (j'en ai plusieurs) qui me logge le résultat d'un find (stdout & stderr) dans /var/log/syslog, tout à l'aide de la commande logger :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    0 7 * * * root find /SPP/data/BACKUP/ -mindepth 1 -maxdepth 1 -type d -mtime +5 -exec rm -rf {} \; 2>&1 | /usr/bin/logger -t cron.cluster-rm-backup-files -i -p user.warn
    Maintenant, ce que j'aimerais faire c'est d'envoyer une alerte avec un message d'erreur à NAGIOS lorsque stderr contienne une valeur non null

    Voici donc la crontab que j'essaye d'adapter (qui ne fonctionne pas pour le moment)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    0 7 * * * root find /SPP/data/BACKUP/ -mindepth 1 -maxdepth 1 -type d -mtime +5 -exec rm -rf {} \; 2>&1 | /usr/bin/logger -t cron.cluster-rm-backup-files -i -p user.warn | /usr/bin/test -n "1>&2 2" && /usr/bin/logger -p local0.warn "[ftmms][3][1][CLUSTER-BACKUP]: Problem detected by removing the backup..."
    Est-ce qu'il existe un moyen dans cette crontab de "refaire" passer la sortie d'erreurs STDERR (2) avec des pipes "|" ou autre, jusqu'à la commande /usr/bin/test, pour ensuite dire que si stderr est non null, j'envoie mon message d'alerte à la supervision ?

    Merci d'avance pour toute opinion,

  2. #2
    Modérateur
    Avatar de gangsoleil
    Homme Profil pro
    Manager / Cyber Sécurité
    Inscrit en
    Mai 2004
    Messages
    10 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Manager / Cyber Sécurité

    Informations forums :
    Inscription : Mai 2004
    Messages : 10 150
    Points : 28 129
    Points
    28 129
    Par défaut
    Bonjour,

    Tout d'abord, pour gagner en lisibilite, je te conseille de transformer ta ligne de commande en script. N'oublies pas d'utiliser les fonctions en chemin absolu pour que cela fonctionne en crontab.

    Ensuite, je pense que le plus simple dans ton cas est de rediriger les deux sorties vers deux fichiers temporaires, que tu parseras ensuite pour faire le traitement de ton choix.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    15
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Mars 2008
    Messages : 15
    Points : 17
    Points
    17
    Par défaut Résolu
    Bonjour,

    Tout d'abord, merci pour ta réponse.
    Finalement, j'ai pu le faire directement dans une seule ligne de cron.

    Le souci était par rapport aux tests que je faisais...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    # touch file1 file2 file3
    # chattr +i file1
    En cron :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * * * * * root find /root/ -name file* -exec rm -f {} \; 2>&1 | /usr/bin/logger -t cron.rm-test-files -i -p local0.warn
    Ce qui me logge bien l'erreur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Apr 17 18:39:16 hostname cron.rm-files-test[19696]: rm: cannot remove `/root/file1': Operation not permitted
    Le message est bien loggé dans syslog, mais celui-ci n'est pas envoyé aux sondes Logs de supervision à cause du caracter '`' ne fermant.

    J'ai pu me rendre compte de l'erreur en envoyant un logger directement sur le terminal avec le message d'erreur précédemment généré :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    # /usr/bin/logger -t cron.perl-files -i -p local0.warn "rm: cannot remove `/root/file1': Operation not permitted"
    > -bash: unexpected EOF while looking for matching ``'
    -bash: syntax error: unexpected end of file
    Voici donc la solution finale pour laquelle je me suis décidé :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    0 7 * * * root find /SPP/data/BACKUP/ -mindepth 1 -maxdepth 1 -type d -mtime +5 -exec rm -rf {} \; 2>&1 | sed -e "s/[\`]//" -e "s/[']//" | /usr/bin/logger -t cron.cluster-rm-backup-files -i -p local0.warn
    En s'échappant des caractères bizarres...

    Merci, à bientôt !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Erreur des tests des DAO
    Par bruneltouopi dans le forum Persistance des données
    Réponses: 2
    Dernier message: 05/03/2012, 09h50
  2. Formulaire, redirections et gestion des erreurs
    Par xnopre dans le forum Langage
    Réponses: 7
    Dernier message: 18/08/2011, 08h58
  3. [1.x] Modification de l'affichage des erreurs des formulaires
    Par asmodaiii dans le forum Symfony
    Réponses: 5
    Dernier message: 10/09/2009, 16h42
  4. [MySQL] UPDATE : distinguer les erreurs des erreurs !
    Par youpitralala dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 20/08/2009, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo