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 POSIX Discussion :

Récupérer via une liste, le serveur le plus rapide [SH]


Sujet :

Shell et commandes POSIX

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut Récupérer via une liste, le serveur le plus rapide
    Bonjour

    Je tente de réaliser un script qui permet via une liste définie de serveurs de sélectionner celui qui est le plus rapide.
    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
    #!/bin/sh
     
    chosts="serveur1.com serveur2.org serveur3.fr"
     
    maverage="20000"
    cserver=""
     
    for hosts in $chosts
    do
       rping=`ping -c 3 $hosts | tail -1 | awk '{ print $4 }' | cut -d '/' -f 2`
       cserver=${rping}
       if [ "$cserver" -lt "$maverage" ]; then
           cserver=$hosts
       fi
    done
     
    echo $cserver
    Si j'exécute la commande suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ping -c 3 serveur1.com | tail -1 | awk '{ print $4 }' | cut -d '/' -f 2
    j'obtiens bien un résultat comme: 7.793

    Cependant, lorsque j'exécute le script en lui même, j'obtiens le résultat suivant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    test1[16]: 7.403: unexpected '.'
    test1[16]: 4.626: unexpected '.'
    test1[16]: 5.456: unexpected '.'
    5.456
    Un petit coup de main s'il vous plaît

  2. #2
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 359
    Par défaut
    Bonjour,

    Le souci ici est que le shell ne gère pas les nombre décimaux, d'où le souci du "." dans le test...

    Il faut que tes valeurs soient des entiers.

    Une solution, remplace ta ligne de ping par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ping -c 3 localhost | awk -F\/ 'END{print $5*1000}'
    Celle-ci fait la même chose mais multiplie par 1000 afin d'obtenir un entier.

  3. #3
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Merci beaucoup pour cette explication.
    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
    #!/bin/sh
     
    chosts="serveur1.com serveur2.org serveur3.fr"
     
    maverage="20000"
    cserver=""
    mserv=""
     
    for hosts in $chosts
    do
       test1=`ping -c 3 $hosts | awk -F\/ 'END{print $5*1000}'`
       test2=${test1}
       if [ "$test2" -lt "$maverage" ]; then
           cserver=$hosts
           mserv=$test2
       fi
    done
     
    echo $mserv $cserver
    Le script semble fonctionner mais c'est toujours le dernier serveur de la liste qui ressort même si j'en rajoute

  4. #4
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 359
    Par défaut
    C'est normal, tu compares chacun de tes serveur avec une valeur fixe maverage="20000"

  5. #5
    Membre expérimenté

    Homme Profil pro
    Technicien Help Desk
    Inscrit en
    Juillet 2004
    Messages
    2 756
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Technicien Help Desk

    Informations forums :
    Inscription : Juillet 2004
    Messages : 2 756
    Par défaut
    Citation Envoyé par disedorgue Voir le message
    C'est normal, tu compares chacun de tes serveur avec une valeur fixe maverage="20000"
    Je ne vois pas comment je pourrai faire sans devoir fixer une valeur fixe minimale.

  6. #6
    Expert confirmé Avatar de disedorgue
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Décembre 2012
    Messages
    4 359
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Décembre 2012
    Messages : 4 359
    Par défaut
    Oui, mais à un certain moment, il faut que la valeur de cette variable change, ce qui n'est pas le cas ici.

    Ce que tu fait, c'est que tu compare tout tes serveurs avec cette valeur fixe et si celle du serveur est plus petite alors tu prends ce serveur, donc, à part si ton dernier serveur est plus grand que cette valeur, alors il gagnera tout le temps...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer une liste des serveurs SQL Server de votre réseau
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 29/12/2010, 10h42
  2. Récupérer une liste des serveurs SQL Server de votre réseau
    Par Thomas Lebrun dans le forum Contribuez
    Réponses: 0
    Dernier message: 28/12/2010, 22h58
  3. Réponses: 0
    Dernier message: 16/10/2008, 14h49
  4. Récupérer via une Userfonction, un ordre sql soumis au serveur
    Par michel1234 dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 23/01/2008, 11h10
  5. récupération des données via une liste déroulante
    Par rahan_dave dans le forum Access
    Réponses: 1
    Dernier message: 13/10/2005, 12h27

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