Forum Linux.debian/ubuntu MRTG et crontab : problème d'actualisation des données

Posté par  .
Étiquettes : aucune
0
6
mai
2007
Bonjour,
je suis actuellement sur un projet de monitoring de serveurs.
J'ai choisi pour cela d'utiliser mrtg.

Le problème est le suivant :
Lorsque je tape à la main /usr/bin/mrtg /etc/mrtg.cfg toutes les 2 mins environ pour mettre à jour les données des graphes, cela se passe bien , les graphes sont tracés avec les bonnes valeurs.

Mais bien sur je le fais à la main juste pour tester que ca marche bien, après quoi j'utilise le cron pour le faire automatiquement.
Et c'est la que j'ai un gros problème.
En effet, lorsque cette meme commande est executée par le crontab, le graphe s'actualise bien qd il le faut ya marqué "les statistiques ont été mises à jour le ..." avec un intervalle de 2min ) , mais avec des valeurs nulles ! C'est à dire j'ai des graphes tout plat avec des données à 0 !!

Voici mon crontab :
*/2 * * * * /usr/bin/mrtg /etc/mrtg.cfg
*/2 * * * * echo "test" >> /root/test.txt

Le cron s'execute bien vu que j'ai du texte dans le fichier test.txt, mais les graphes s'actualisent comme je l'ai dis avec des valeurs nulles.

J'ai ensuite essayé de contourner le problème en faisant executer par le crontab un script shell appelé mrtg.cron, avec les bonnes permissions:

#!/bin/bash

/usr/bin/mrtg /etc/mrtg.cfg (aussi essayé `/usr/bin/mrtg /etc/mrtg.cfg`)
echo "test" >> /root/test.txt

avec le crontab correspondant :
*/2 * * * * /root/mrtg.cron

Il fait bien le echo , les graphes s'actualisent bien ttes les 2 mins comme tt a l'heure mais toujours avec des valeurs nulles :/

J'ai l'impression que c'est /usr/bin/mrtg /etc/mrtg.cfg qui pose pb.
En effet dans l'un des scripts php utilisés dans mrtg.cfg pour obtenir les données et les tracer, j'ai fait un fwrite d'une phrase pour tester. Et comme vous l'avez deviné, ca marche qd je fais
/usr/bin/mrtg /etc/mrtg.cfg mais ca ne marche plus lors de l'execution du crontab, comme si en fait mrtg tracait ses graphes sans lire le mrtg.cfg pour aller chercher ses données, d'où les valeurs nulles.

Quelqu'un pourrait il m'aider?
Merci !!
  • # Toujours le meme probleme

    Posté par  . Évalué à 1.

    Par ailleurs, j'ai ecrit un script php qui fait un
    exec("/usr/bin/mrtg /etc/mrtg.cfg "), mais comme d'hab il ne veut pas, sauf qd je lance ce script ds un terminal avec php -f

    Je vais devenir fou ! :/
  • # un probleme de droit ?

    Posté par  . Évalué à 1.

    1°) cron n'a peut-etre pas les droits pour aller lire les fichiers logs/proc necessaires à l'alimentation des graphes

    2°) d'apres http://www.linux-kheops.com/doc/man/manfr/man-html-0.9/man5/(...)

    le mailto permet d'outrepasser l'appartenace de la crontab.

    sur le meme principe il me semble que l'on peut faire la ligne la maniere suivante

    */2 * * * * root le_chemin/le_script

    pour forcer l'execution en tant que root.

    et il vaut mieux avoir un script qui lance mtrg et son fichier de conf et l'appeler depuis la crontab.

    3°) s'il y a une sortie (des erreurs par exemple) elles devraient etre envoyés par email, tu auras peut-etre plus d'info.
    • [^] # Re: un probleme de droit ?

      Posté par  . Évalué à 1.

      Tout d'abord merci de ta réponse.

      J'ai essayé la solution 3 (avec */2 * * * * /root/mrtg.cron >> /root/err.txt 2>&1 dans le crontab).
      Cette redirection des erreurs me permet de voir que ... ben j'ai des erreurs (sic !)
      Cependant, la nature des erreurs m'étonne, vu que /usr/bin/mrtg /etc/mrtg.cfg passe mais que cette commande génère des erreurs une fois dans un script lancé par un cron.

      Voici l'une des erreurs que j'obtiens :


      Can't exec "php" : aucun fichier ou repertoire de ce type at /usr/bin/mrtg line 1679
      WARNING : running 'php -f /var/www/scripts/tcpConnection.php'' : aucun fichier ou repertoire de ce type
      WARNING : Cannot get any data from external command 'php -f /var/www/scripts/tcpConnection.php' . Maybe the external command did not even start
      WARNING : problem with external get 'php -f /var/www/scripts/tcpConnection.php' : Expected a number for 'in' (ou out d'ailleurs) but got nothing.

      J'ai la meme erreur pour tous les scripts php sur ce modèle, alors qu'il existent bien (/usr/bin/mrtg /etc/mrtg.cfg utilise bien ces fichiers et me donne les données), et les permissions sont les bonnes, j'ai meme tenté un chmod 777 sur tout pour tester, et je suis loggé en tant que root depuis le début (je sais cay mal mais je touche bcp au systeme).

      Solution 2 : j'ai mis */2 * * * * /root/mrtg.cron >> /root/err.txt 2>&1
      Et j'ai une autre erreur, meme pas au niveau de mrtg :
      /bin/sh : line 1 : root : command not found.
      Je supprime ce pb en mettant SHELL=/bin/sh au début du crontab, et je tombe sur une erreur comme quoi il y a 2 copies de MRTG qui fonctionnent en meme temps. Je resoud ce pb en commentant dans /etc/cron.d/mrtg une ligne qui faisait la meme chose.
      Je retombe ensuite sur le problème de la solution 1!!

      Qqun saurait il pourquoi mrtg ne parvient pas a trouver mes fichiers php , alors qu'ils existent?

      Encore merci !
      • [^] # Re: un probleme de droit ?

        Posté par  . Évalué à 1.

        /usr/bin/mrtg /etc/mrtg.cfg

        semble utilisé php sans precision du chemin
        php -f /var/www/scripts/tcpConnection.php

        du coup ca merdoie.

        pour un usage dans les cron il faut preciser le chemin complet des binaires que tu veux utiliser.

        tu peux peut-etre ajouter un
        PATH=.....
        dans ton script afin que le script trouve les differents binaires (php ou autre)
        • [^] # RESOLU

          Posté par  . Évalué à 1.

          J'ai modifié mes scripts pour les rendre executable en ajoutant au début :
          #!/usr/local/bin/php

          Ensuite dans mrtg j'ai mis Target : `/var/www/scripts/tcpConnection.php`

          Puis ca marche !!!
          Ah les joies du crontab....

          En tout cas merci beaucoup de ton aide, ca marche maintenant :)).
          • [^] # Re: RESOLU

            Posté par  . Évalué à 1.

            c'est à retenir

            le crontab s'execute sans la variable PATH
            il te faut donc definir un PATH dans ton script ou preciser le chemin complet des binaires/scripts que tu veux utiliser.

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.