IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Shell et commandes GNU Discussion :

Script shell - datacore - problème


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 32
    Par défaut Script shell - datacore - problème
    Bonjour à toutes et à tous,

    Suite à la mise en place d'un outil de supervision, je dois créer des scripts pour interroger mes OIDs de mes datacore et les intégrer à ma supervision.

    Je débute en shell, voici mon code :

    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
    #! /bin/sh
     
    STATE=2
    PLUGIN_PATH='/srv/eyesofnetwork/nagios/plugins'
    COMMAND_PATH='/bin'
     
       ####################################### Resultats #########################################
     
       #### valeur pour up to date du vDISK PRODUCTION ####
     
    tab=(
    '.32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
    '.32.56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70'
    '.32.68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48'
    '.32.54.55.66.67.52.51.53.67.69.57.50.55.57.57.57.67.55.56.66.48.54.65.57.67.51.65.66.57.54.70.69.54'
    '.32.51.56.56.66.67.68.68.51.53.69.65.57.54.50.69.53.55.69.48.65.52.69.53.68.57.54.50.53.56.48.55.49'
    '.32.54.52.67.56.67.65.55.57.70.53.69.49.70.68.53.51.67.50.50.53.70.48.65.49.68.50.70.65.70.52.49.65'
    '.32.52.65.70.69.68.53.53.68.48.50.53.55.49.55.54.68.57.49.49.53.70.57.51.65.51.57.69.69.65.52.57.55'
    '.32.51.56.54.57.53.67.50.52.70.51.56.55.50.65.66.54.52.70.54.50.65.65.56.55.51.65.51.67.49.70.49.53'
    '.32.66.53.69.52.65.57.49.70.69.54.53.51.69.51.66.65.65.66.70.48.57.70.51.53.51.65.67.51.50.57.56.69'
    '.32.52.67.53.52.69.50.68.65.68.69.66.56.66.67.48.49.56.54.50.55.67.56.56.69.51.67.69.51.49.68.70.56'
       )
     
    if [[ $4 = status && $6 -eq 1 || $6 -eq 2 ]]
    then
    for ((n=0; n < 11; n++))
    do
    	ar+=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6"${tab[n]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" )
    	if [[ (("${ar[n]}" == "Up")) ]] ; then
    	STATE=0
    	else
    	STATE=2
    	fi
    done
     
    rslt_affiche="PRODUCTION_01 est $ar & PRODUCTION_02 est ${ar[1]} & PRODUCTION_03 est ${ar[2]} & PRODUCTION_04 est ${ar[3]} & PRODUCTION_05 est ${ar[4]} & PRODUCTION_06 est ${ar[5]} & PRODUCTION_07 est ${ar[6]} & PRODUCTION_08 est ${ar[7]} & PRODUCTION_09 est ${ar[8]} & PRODUCTION_10 est ${ar[9]}"
    fi
     
    if [[ ($4 == status) ]] ; then #affichage sur le nagios
       $PLUGIN_PATH/check_dummy $STATE "$rslt_affiche"
    fi
       exit $STATE
    Mon problème actuel

    Mon script retourne toujours l'état "CRITIQUE" alors que tous mes vdisk sont UP.

    Je pense que le problème vient de là (mon if dans ma boucle retourne la valeur STATE=2, elle arrive pas à lire mon if) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if [[ (("${ar[n]}" == "Up")) ]] ; then
    	STATE=0
    	else
    	STATE=2
    	fi
    J'ai testé plusieurs choses mais je n'arrive pas à corriger ce problème :/

    Merci de votre aide.

  2. #2
    Modérateur
    Avatar de ggnore
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    2 472
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 472
    Par défaut
    Salut,

    Je ne sais pas si tu as essayé de faire des plugins en perl.
    Pour ma part, je trouve que débuguer du perl est plus facile que bash : des types, des déclarations, des erreurs éloquentes. Tout ça aide bien à y voir clair.

    Ton code m'est difficile à lire.

    ton n varie vraiment dans ta boucle ?
    Toutes les vertus des hommes se perdent dans l’intérêt comme les fleuves se perdent dans la mer.
    N'oubliez pas de consulter les FAQ Linux et les cours et tutoriels Linux

  3. #3
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 32
    Par défaut
    Citation Envoyé par ggnore Voir le message
    Salut,

    Je ne sais pas si tu as essayé de faire des plugins en perl.
    Pour ma part, je trouve que débuguer du perl est plus facile que bash : des types, des déclarations, des erreurs éloquentes. Tout ça aide bien à y voir clair.

    Ton code m'est difficile à lire.

    ton n varie vraiment dans ta boucle ?
    J'ai essayé le perl et je n'y arrivais pas :/

    dans ma boucle, j'ai attribué:

    ar+=
    Je souhaite tester toutes mes OIDs qui sont défini dans mon "tab=" puis incrémenter à chaque fois qu'un test est fini

    Mon problème :

    if [[ (${ar[$n]} = "Up") ]] ; then
    STATE=0
    else
    STATE=2
    fi
    Lorsque j'ai mis :

    echo "${ar[n]}"
    J'ai bien mes 10 valeurs qui sortent

  4. #4
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut
    Bonjour,

    les parenthèses sont inutiles dans un test.

    les parenthèses doubles effectue une évaluation arithmétique.
    "Up" n'étant pas un nombre, il est évalué à zéro !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  5. #5
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 32
    Par défaut
    Citation Envoyé par N_BaH Voir le message
    Bonjour,

    les parenthèses sont inutiles dans un test.

    les parenthèses doubles effectue une évaluation arithmétique.
    "Up" n'étant pas un nombre, il est évalué à zéro !
    Que me conseils-tu ?

  6. #6
    Modérateur
    Avatar de N_BaH
    Profil pro
    Inscrit en
    Février 2008
    Messages
    7 658
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 7 658
    Par défaut

    d'enlever les parenthèses !
    N'oubliez pas de consulter les cours shell, la FAQ, et les pages man.

  7. #7
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Je ne sais pas si ça peut aider, mais voici ce que j'obtiens:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    ]$ tab=(
    > '.32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
    > '.32.56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70'
    > '.32.68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48'
    > '.32.54.55.66.67.52.51.53.67.69.57.50.55.57.57.57.67.55.56.66.48.54.65.57.67.51.65.66.57.54.70.69.54'
    > '.32.51.56.56.66.67.68.68.51.53.69.65.57.54.50.69.53.55.69.48.65.52.69.53.68.57.54.50.53.56.48.55.49'
    > '.32.54.52.67.56.67.65.55.57.70.53.69.49.70.68.53.51.67.50.50.53.70.48.65.49.68.50.70.65.70.52.49.65'
    > '.32.52.65.70.69.68.53.53.68.48.50.53.55.49.55.54.68.57.49.49.53.70.57.51.65.51.57.69.69.65.52.57.55'
    > '.32.51.56.54.57.53.67.50.52.70.51.56.55.50.65.66.54.52.70.54.50.65.65.56.55.51.65.51.67.49.70.49.53'
    > '.32.66.53.69.52.65.57.49.70.69.54.53.51.69.51.66.65.65.66.70.48.57.70.51.53.51.65.67.51.50.57.56.69'
    > '.32.52.67.53.52.69.50.68.65.68.69.66.56.66.67.48.49.56.54.50.55.67.56.56.69.51.67.69.51.49.68.70.56'
    >    )
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    $ for ((n=0; n < 11; n++)); do echo "$n: ${tab[n]}"; done
    0: .32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70
    1: .32.56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70
    2: .32.68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48
    3: .32.54.55.66.67.52.51.53.67.69.57.50.55.57.57.57.67.55.56.66.48.54.65.57.67.51.65.66.57.54.70.69.54
    4: .32.51.56.56.66.67.68.68.51.53.69.65.57.54.50.69.53.55.69.48.65.52.69.53.68.57.54.50.53.56.48.55.49
    5: .32.54.52.67.56.67.65.55.57.70.53.69.49.70.68.53.51.67.50.50.53.70.48.65.49.68.50.70.65.70.52.49.65
    6: .32.52.65.70.69.68.53.53.68.48.50.53.55.49.55.54.68.57.49.49.53.70.57.51.65.51.57.69.69.65.52.57.55
    7: .32.51.56.54.57.53.67.50.52.70.51.56.55.50.65.66.54.52.70.54.50.65.65.56.55.51.65.51.67.49.70.49.53
    8: .32.66.53.69.52.65.57.49.70.69.54.53.51.69.51.66.65.65.66.70.48.57.70.51.53.51.65.67.51.50.57.56.69
    9: .32.52.67.53.52.69.50.68.65.68.69.66.56.66.67.48.49.56.54.50.55.67.56.56.69.51.67.69.51.49.68.70.56
    10:
    Je propose de remplacer for ((n=0; n < 11; n++)) par for ((n=0; n < ${#tab[@]}; n++)).

  8. #8
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Autre remarque:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ $4 = 'status' && $6 -eq 1 || $6 -eq 2 ]]
    est équivalent à:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ ($4 = 'status' && $6 -eq 1) || $6 -eq 2 ]]
    Ne voudrais-tu pas plutôt:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if [[ $4 = 'status' && ($6 -eq 1 || $6 -eq 2) ]]

  9. #9
    Expert confirmé
    Homme Profil pro
    Développeur informatique en retraite
    Inscrit en
    Avril 2008
    Messages
    2 102
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Côtes d'Armor (Bretagne)

    Informations professionnelles :
    Activité : Développeur informatique en retraite

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 102
    Par défaut
    Re-de plus, je voudrais attirer ton attention sur le statut de sortie.
    Actuellement, la variable STATE est écrasée à chaque tour de boucle.
    Donc elle prend pour valeur celle obtenue pour n=11, qui est hors limite.
    Donc elle vaut probablement toujours 2 (qui doit correspondre à ce que tu appelles état "CRITIQUE").

    Avec ma première correction proposée, la variable STATE prendrait pour valeur celle obtenue pour n=10, c'est-à-dire le statut du dernier vdisk.

    Or, sémantiquement, j'imagine que tu veux que la variable STATE passe en critique, si au moins un des vdisks n'est pas UP.

    Dans ce cas, il faudrait remplacer le code par:
    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
    #! /bin/sh
     
    STATE_OK=0
    STATE_CRITIQUE=2
     
    STATE=${STATE_OK}
    PLUGIN_PATH='/srv/eyesofnetwork/nagios/plugins'
    COMMAND_PATH='/bin'
     
    ####################################### Resultats #########################################
     
    #### valeur pour up to date du vDISK PRODUCTION ####
     
    tab=(
        '.32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
        '.32.56.67.65.55.51.51.67.54.67.54.55.55.54.52.65.52.56.55.52.67.50.52.56.50.56.54.53.52.69.54.55.70'
        '.32.68.66.69.56.65.53.54.70.66.49.70.54.57.69.52.65.68.50.69.52.67.53.52.68.67.51.51.48.70.49.57.48'
        '.32.54.55.66.67.52.51.53.67.69.57.50.55.57.57.57.67.55.56.66.48.54.65.57.67.51.65.66.57.54.70.69.54'
        '.32.51.56.56.66.67.68.68.51.53.69.65.57.54.50.69.53.55.69.48.65.52.69.53.68.57.54.50.53.56.48.55.49'
        '.32.54.52.67.56.67.65.55.57.70.53.69.49.70.68.53.51.67.50.50.53.70.48.65.49.68.50.70.65.70.52.49.65'
        '.32.52.65.70.69.68.53.53.68.48.50.53.55.49.55.54.68.57.49.49.53.70.57.51.65.51.57.69.69.65.52.57.55'
        '.32.51.56.54.57.53.67.50.52.70.51.56.55.50.65.66.54.52.70.54.50.65.65.56.55.51.65.51.67.49.70.49.53'
        '.32.66.53.69.52.65.57.49.70.69.54.53.51.69.51.66.65.65.66.70.48.57.70.51.53.51.65.67.51.50.57.56.69'
        '.32.52.67.53.52.69.50.68.65.68.69.66.56.66.67.48.49.56.54.50.55.67.56.56.69.51.67.69.51.49.68.70.56'
    )
     
    if [[ $4 = status && ($6 -eq 1 || $6 -eq 2) ]]
    then
        for ((n=0; n < ${#tab[@]}; n++))
        do
    	ar+=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6"${tab[n]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" )
    	if [[ "${ar[n]}" != "Up" ]] ; then
    	    STATE=${STATE_CRITIQUE}
    	fi
        done
     
        rslt_affiche="PRODUCTION_01 est $ar & PRODUCTION_02 est ${ar[1]} & PRODUCTION_03 est ${ar[2]} & PRODUCTION_04 est ${ar[3]} & PRODUCTION_05 est ${ar[4]} & PRODUCTION_06 est ${ar[5]} & PRODUCTION_07 est ${ar[6]} & PRODUCTION_08 est ${ar[7]} & PRODUCTION_09 est ${ar[8]} & PRODUCTION_10 est ${ar[9]}"
    fi
     
    if [[ $4 = status ]] ; then #affichage sur le nagios
        $PLUGIN_PATH/check_dummy $STATE "$rslt_affiche"
    fi
    exit $STATE

  10. #10
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 32
    Par défaut
    Merci de ta réponse, je vais tester cela, je vous tiens au jus.

    Je vous remercie de m'aider, vous êtes géniaux !

    Continuez comme ça !

    Edit : Script en place, tout marche impec, là je vais me lancé dans les conditions pour faire des seuils d'alertes ^^

  11. #11
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Novembre 2015
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 28
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Novembre 2015
    Messages : 32
    Par défaut script pour les seuils
    Bonsoir,

    Actuellement je suis en train de faire un script pour faire les seuils d'alertes, j'ai pensé à ceci ?


    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
    #! /bin/sh
     
    STATE_OK=0
    STATE_WARNING=1
    STATE_CRITIQUE=2
     
    STATE=${STATE_OK}
    PLUGIN_PATH='/srv/eyesofnetwork/nagios/plugins'
    COMMAND_PATH='/bin'
     
    ####################################### Resultats #########################################
     
    #### valeur pour up to date du vDISK PRODUCTION ####
     
    tab=(
        '.32.69.52.50.50.56.68.51.66.51.69.69.54.56.68.65.65.69.69.55.57.50.68.52.55.53.55.68.52.53.57.69.70'
    )
     
    if [[ $4 = status && ($6 -eq 1 || $6 -eq 2) ]]
    then
        for ((n=0; n < ${#tab[@]}; n++))
        do
    	ar+=( "$($PLUGIN_PATH/check_snmp -H $2 -C X -o 1.3.6.1.4.1.7652.1.1.1.6"${tab[n]}" | grep to | cut -d '-' -f 2 | cut -d '"' -f 2 | cut -c -2)" )
    	if [[ "${ar[n]}" != "0" ]] ; then
    	    STATE=${STATE_WARNING}
            elif [[ "${ar[n]}" >= 2 ]] ; then
                STATE=${STATE_CRITIQUE}
    	fi 
        done
     
        rslt_affiche="PRODUCTION_01 est $ar"
    fi
    Qu'en pensez-vous ?

Discussions similaires

  1. script shell: problème avec le caractère espace
    Par Le fut dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 04/05/2017, 11h49
  2. problème script shell
    Par jeje69 dans le forum Shell et commandes GNU
    Réponses: 0
    Dernier message: 09/01/2008, 14h30
  3. problème sur script shell
    Par cyranno dans le forum Linux
    Réponses: 1
    Dernier message: 11/12/2007, 16h19
  4. Petit problème de script shell
    Par Mainman dans le forum Linux
    Réponses: 4
    Dernier message: 11/12/2007, 08h07
  5. Problème avec mon script shell case in esac
    Par Olivier Regnier dans le forum Shell et commandes GNU
    Réponses: 2
    Dernier message: 28/06/2007, 22h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo