[RESOLU] besoin aide script shell (pb sur boucle while)

besoin aide script shell (pb sur boucle while) [RESOLU] - Codes et scripts - Linux et OS Alternatifs

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
Reply

Marsh Posté le 08-10-2007 à 16:51:55   

Reply

Marsh Posté le 08-10-2007 à 23:05:45    

as-tu pensé à installer nagios ? avec plusieus machines, ça peut valoir la peine d'essayer.


---------------
"Your god is too small", Giordano Bruno, 1548 - 1600
Reply

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.

Reply

Marsh Posté le 09-10-2007 à 09:29:41    

A priori rien ne cloche (excepté le #!/bin/sh, il manque le !)  [:spamafote]


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 09-10-2007 à 09:30:16    

On pourrait avoir le log du traitement ?


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 09-10-2007 à 09:42:00    

voici le meme un peu plus propre :
 

#!/bin/sh
set -x
#FICHIER DE CONF
CONF=fichier.cfg
 
#SEUIL DES ALARMES
SEUIL=90
 
while read IP SOURCE
do
                ssh $IP -l root df -k | awk '{ print $6 "\t" $7}'| sed -e "s/\%//g" | sed '1d'>$IP.log
 
        while read OCCUPATION PARTITION
        do
                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 < $IP.log
rm  $IP.log
done < $CONF


 
Et voici les logs :
 

CONF=fichier.cfg
SEUIL=90
+ read IP SOURCE
+ ssh 192.168.0.1 -l root df -k  
+ awk { print $6 "\t" $7}  
+ sed -e s/\%//g  
+ sed 1d  
+ read OCCUPATION PARTITION  
+ [ 26 -lt 90 ]  
+ echo pas de probleme sur BIBI : / est a 26%
pas de probleme sur BIBI : / est a 26%
+ read OCCUPATION PARTITION  
+ [ 9 -lt 90 ]  
+ echo pas de probleme sur BIBI : /usr est a 9%  
pas de probleme sur BIBI : /usr est a 9%
+ read OCCUPATION PARTITION  
+ [ 8 -lt 90 ]  
+ echo pas de probleme sur BIBI : /var est a 8%  
pas de probleme sur BIBI : /var est a 8%
+ read OCCUPATION PARTITION  
+ [ 1 -lt 90 ]  
+ echo pas de probleme sur BIBI : /tmp est a 1%  
pas de probleme sur BIBI : /tmp est a 1%
+ read OCCUPATION PARTITION  
+ [ 15 -lt 90 ]  
+ echo pas de probleme sur BIBI : /home est a 15%  
pas de probleme sur BIBI : /home est a 15%
+ read OCCUPATION PARTITION  
+ rm 192.168.0.1.log  
+ read IP SOURCE


Message édité par b0uzin le 09-10-2007 à 09:58:50
Reply

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 ;)


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 09-10-2007 à 09:51:04    

Ben alors, il marche ce script [:mouais]
 
Et d'ailleurs, tu rentres les infos à la main avec des read ? [:gratgrat]


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

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.

Reply

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 :/


---------------
Il y a autant d'atomes d'oxygène dans une molécule d'eau que d'étoiles dans le système solaire.
Reply

Marsh Posté le 09-10-2007 à 10:12:26   

Reply

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...

Reply

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


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 09-10-2007 à 11:13:11    

Il fallait juste modifier les espaces entre le > c'est ça ?
 
Ca ne change rien... :(

Reply

Marsh Posté le 09-10-2007 à 11:13:39    

non le "\t" en \t
et le " " en ' ' dans la règle du sed

Message cité 1 fois
Message édité par o'gure le 09-10-2007 à 11:14:35

---------------
Relax. Take a deep breath !
Reply

Marsh Posté le 09-10-2007 à 11:24:21    

o'gure a écrit :

non le "\t" en \t
et le " " en ' ' dans la règle du sed


Monsieur o'gure est observateur :jap:
 
:D


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 09-10-2007 à 11:25:17    

J'adore le jeu des 7 erreurs [:cerveau o]


---------------
Relax. Take a deep breath !
Reply

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.


Message édité par b0uzin le 09-10-2007 à 11:29:26
Reply

Marsh Posté le 09-10-2007 à 11:29:36    

Mhhmm, c'est pas /t qu'il faut mettre, mais \t :o


---------------
Wedge#2487 @HS -#- PW: +∞ -#- Khaz-Modan/Boltiz @WoW
Reply

Marsh Posté le 09-10-2007 à 11:31:03    

n'empêche, avec nagios... [:thalis]


---------------
"Your god is too small", Giordano Bruno, 1548 - 1600
Reply

Marsh Posté le 09-10-2007 à 11:34:28    

J'ai reglé le probleme, j'ai viré le \t ! :p


Message édité par b0uzin le 09-10-2007 à 11:34:50
Reply

Marsh Posté le 09-10-2007 à 11:37:01    

roscocoltran a écrit :

n'empêche, avec nagios... [:thalis]


 
Arf, trop facile !  :na:  

Reply

Marsh Posté le 10-10-2007 à 10:45:33    

Personne n'a d'idée ?
 
Pourquoi le ssh emepche la boucle de boucler ??!

Reply

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

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed