besoin aide script shell (pb sur boucle while) [RESOLU] - Codes et scripts - Linux et OS Alternatifs
Marsh Posté le 08-10-2007 à 23:05:45
as-tu pensé à installer nagios ? avec plusieus machines, ça peut valoir la peine d'essayer.
Marsh Posté le 09-10-2007 à 07:50:19
Merci mais je ne cherche pas de solution alternative. C'est également ludique pour comprendre ce qui cloche dans ce script.
A bientot.
Marsh Posté le 09-10-2007 à 09:29:41
A priori rien ne cloche (excepté le #!/bin/sh, il manque le !)
Marsh Posté le 09-10-2007 à 09:30:16
On pourrait avoir le log du traitement ?
Marsh Posté le 09-10-2007 à 09:42:00
voici le meme un peu plus propre :
#!/bin/sh |
Et voici les logs :
CONF=fichier.cfg |
Marsh Posté le 09-10-2007 à 09:48:17
tu peux utiliser les balises [fixed] si tu veux pour ton script, ca rend mieux sur le forum
Marsh Posté le 09-10-2007 à 09:51:04
Ben alors, il marche ce script
Et d'ailleurs, tu rentres les infos à la main avec des read ?
Marsh Posté le 09-10-2007 à 10:00:40
Bah non car il ne lit que la premiere ligne du premier fichier de configuration (BIBI).
Je n'ai pas compris pour les infos à la main pour les read... :|
Le fichier fichier.cfg, c'est bien moi qui le remplit oui.
Marsh Posté le 09-10-2007 à 10:12:26
ben en foutant un echo à la place de son ssh | brol ca marche nickel, donc ca vient pas des while, ya un truc dans
ssh $IP -l root df -k | awk '{ print $6 "\t" $7}'| sed -e "s/\%//g" | sed '1d'>$IP.log |
qui doit provoquer l'arrêt brutal
Marsh Posté le 09-10-2007 à 10:47:32
bien vu !
J'ai commenté cette ligne et empecher la suppression du fichier de log. Le circuit fonctionne !!!
Bon, maintenant que l'on sait où chercher, reste à savoir où se situe le problème et comment le contourner...
Marsh Posté le 09-10-2007 à 10:53:04
essayes
ssh $IP -l root df -k | awk '{ print $6 \t $7}'| sed -e 's/\%//g' | sed '1d' > $IP.log |
Marsh Posté le 09-10-2007 à 11:13:11
Il fallait juste modifier les espaces entre le > c'est ça ?
Ca ne change rien...
Marsh Posté le 09-10-2007 à 11:13:39
non le "\t" en \t
et le " " en ' ' dans la règle du sed
Marsh Posté le 09-10-2007 à 11:24:21
o'gure a écrit : non le "\t" en \t |
Monsieur o'gure est observateur
Marsh Posté le 09-10-2007 à 11:25:17
J'adore le jeu des 7 erreurs
Marsh Posté le 09-10-2007 à 11:27:09
ssh $IP -l root df -k | awk '{ print $6,$7}' | sed -e 's/\%//g' | sed '1d' > $IP.log |
Le /t dans le awk sans les guillemets ne fonctionne pas.
Le probleme provient du ssh car j'ai remplacé temporairement dans le script par cette ligne :
ssh $IP -l root df -k > test.log |
ensuite je l'ai commenté puis lancé le script avec :
cat test.log | awk '{ print $6,$7 }'| sed -e 's/\%//g' | sed '1d' > $IP.log |
Et ça fonctionne...
bien sur lorsque je decommente la ligne avec le ssh, le script ne boucle pas.
Marsh Posté le 09-10-2007 à 11:29:36
Mhhmm, c'est pas /t qu'il faut mettre, mais \t
Marsh Posté le 09-10-2007 à 11:31:03
ReplyMarsh Posté le 09-10-2007 à 11:34:28
J'ai reglé le probleme, j'ai viré le \t !
Marsh Posté le 09-10-2007 à 11:37:01
ReplyMarsh Posté le 10-10-2007 à 10:45:33
Personne n'a d'idée ?
Pourquoi le ssh emepche la boucle de boucler ??!
Marsh Posté le 10-10-2007 à 10:59:17
Trouvé !
il suffisait de faire une recherche sur les ng avec "ssh boucle while"
Le ssh bouffe l'entrée standard, il suffisait d'ajouter un
ssh -n $IP df -k |
Marsh Posté le 08-10-2007 à 16:51:55
Bonjour,
En gros je cherche à vérifier l'espace disque de plusieurs machines sous certaines condition grace à un fichier de configuration.
Voici le script incriminé :
#/bin/sh
set -x
#FICHIER DE CONF
CONF=fichier.cfg
#SEUIL DES ALARMES
SEUIL=90
# Tant qu'une ligne est presente
cat $CONF | while read line
do
# INITIALISATION DES PARAMETRES
IP=$(echo ${line} | awk '{ print $1 } ')
SOURCE=$(echo ${line} | awk '{ print $2 } ')
ssh $IP -l root df -k | awk '{ print $6 "\t" $7}'| sed -e "s/\%//g" | sed '1d'>$IP.log
cat $IP.log | while read line
do
PARTITION=$(echo ${line} | awk '{ print $2 } ')
OCCUPATION=$(echo ${line} | awk '{ print $1 } ')
if [ "$OCCUPATION" -lt $SEUIL ]
then
echo "pas de probleme sur $SOURCE : $PARTITION est a $OCCUPATION%"
else
echo "incident sur $SOURCE : $PARTITION est a $OCCUPATION%"
fi
done
rm $IP.log
done
voici le fichier de conf :
192.168.0.1 BIBI
192.168.0.2 BOBO
192.168.0.3 BABA
192.168.0.4 BUBU
192.168.0.5 BEBE
J'utilise une boucle while dans une autre boucle qui fonctionne lors du premier test. La machine 192.168.0.1 BOUBOU est bien checké mais pas les suivantes. Pourquoi ?
Merci.
Message édité par b0uzin le 10-10-2007 à 11:00:00