Bonjour,
Je viens vous demander de l'aide car j'ai un problème avec ma boucle.
J'ai créer un plugin nagios, celui fonctionne mais j'ai des problèmes avec certaines remontés...
Concernant le script le voici :
Sauf que parfois il arrive que le script ne me remonte pas une valeur mais un message d'erreur qui n'est pas important sauf que cela fausse ma supervision.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21 #On va chercher la valeur val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//') unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//') #Arrondir le nombre valeur=$(echo $val | cut -f1 -d\.) #Réinscription de l'unité unity=$(echo $unite | sed 's/degrees-celsius/°C/g' | sed 's/percent/%/g' | sed 's/no-units//g' | sed 's/kilowatt-hours/kWh/g' | sed 's/cubic-meters-per-hour/m3h/g' | sed 's/watts/W/g' | sed 's/meters/m/g' | sed 's/hours/h/g' | sed 's/revolutions-per-minute/tr\/min/g') #Condition if (( $(echo "$valeur > $CRIT" | bc -l) ));then echo " "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 2 elif (( $(echo "$valeur >= $WARN" | bc -l) ));then echo " "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 1 else echo " "$valeur" "$unity" | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 0 fi
C'est pourquoi j'aimerai lorsque mes variables $val et $unite ont pour valeur "Error: APDU Timeout!" que l'on relance les commandes :
Donc j'ai mis mon script dans une boucle...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//') unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//')
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44 #On va chercher la valeur val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//') unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//') if [$val = "Error: APDU Timeout"] || [$unite = "Error: APDU Timeout"];then val=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 85 | sed 's/\r//') unite=$(/tmp/bacnet-stack-0.8.3/bin/bacrp $AUTOMATE $OBJECT $IDENTIFIER 117 | sed 's/\r//') #Arrondir le nombre valeur=$(echo $val | cut -f1 -d\.) #Réinscription de l'unité unity=$(echo $unite | sed 's/degrees-celsius/°C/g' | sed 's/percent/%/g' | sed 's/no-units//g' | sed 's/kilowatt-hours/kWh/g' | sed 's/cubic-meters-per-hour/m3h/g' | sed 's/watts/W/g' | sed 's/meters/m/g' | sed 's/hours/h/g' | sed 's/revolutions-per-minute/tr\/min/g') #Condition if (( $(echo "$valeur > $CRIT" | bc -l) ));then echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 2 elif (( $(echo "$valeur >= $WARN" | bc -l) ));then echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 1 else echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 0 fi else #Arrondir le nombre valeur=$(echo $val | cut -f1 -d\.) #Réinscription de l'unité unity=$(echo $unite | sed 's/degrees-celsius/°C/g' | sed 's/percent/%/g' | sed 's/no-units//g' | sed 's/kilowatt-hours/kWh/g' | sed 's/cubic-meters-per-hour/m3h/g' | sed 's/watts/W/g' | sed 's/meters/m/g' | sed 's/hours/h/g' | sed 's/revolutions-per-minute/tr\/min/g') #Condition if (( $(echo "$valeur > $CRIT" | bc -l) ));then echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 2 elif (( $(echo "$valeur >= $WARN" | bc -l) ));then echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 1 else echo " $valeur $unity | $unity=$valeur;$WARN;$CRIT;0;$MAX " && exit 0 fi fi
...sauf que c'est pas optimisé, je pense qu'il y a plus simple, et de toute façon cela ne fonctionne pas car il compare une valeur numérique à une chaine de caractère...
Donc je ne sais pas trop comment faire
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 + val=25.400000 ++ /tmp/bacnet-stack-0.8.3/bin/bacrp 2098247 0 19 117 ++ sed 's/\r//' + unite=degrees-celsius + '[25.400000' = 'Error: APDU Timeout]' check_siemens.sh: line 41: [25.400000 : commande introuvable + '[degrees-celsius' = 'Error: APDU Timeout]' check_siemens.sh: line 41: [degrees-celsius : commande introuvable![]()
Partager