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 David . Évalué à 1.
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 NeoX . Évalué à 1.
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 David . Évalué à 1.
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 NeoX . Évalué à 1.
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 David . Évalué à 1.
#!/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 NeoX . Évalué à 1.
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.