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 :

Verification état serveur


Sujet :

Shell et commandes GNU

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Par défaut Verification état serveur
    Bonjour à tous,
    Je suis vraiment un débutant en shell (et en n'importe quel langage de programmation d'ailleurs), mais dans le souci de me perfectionner j'ai accepté de mon maitre de stage l'élaboration de petits scritps en shell. Ma première mission consiste en l'établissement d'un script qui tournera en fond sur ma machine et toutes les X secondes testera le serveur de l'entreprise pour vérifier qu'il est bien en état de marche,et dans le cas contraire enverra un email a la personne concernée. Voici mon début de script (je n'ai pas encore pris en compte le "toutes les X secondes") :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    #!/bin/bash
    wget --timeout=1 <a href="http://www.sitedelentreprise.com" target="_blank">www.sitedelentreprise.com</a>
    z=$!
    if z=1 
    then
    mailx -b serveur_down -s "from mailx" mailduconcerné@serveur.c
    om

    malheuresment lors de mes tests ca ne marche pas... J'ai pas mal cherché sur internet mais bon je n'ai pas trouvé grand chose..
    Merci d'avance pour votre aide

  2. #2
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Si c'est le code retour de la commande wget que tu souhaites testé, la syntaxe n'est pas "$!" mais "$?"
    Le test avec if est mauvais. Il faudrait que tu lises les bases du shell :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if [ "${z}" = "1" ]
    then
       ...
    fi

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Par défaut
    Merci bien! Voila mon script final. J'attend vos avis commentaires et éventuelle correction

    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
    #!/bin/bash
    destinataire=anonyme@anonyme.com
    site1=www.monsite.com	
    logdr=/var/log/serv
    testtemp=/tmp/down
    wget --timeout=1 k
    z=$?
    test -f $testtemp
    a=$?
    if [ "${z}" = "1" ] && ["${a}" = "1" ]
     
    then
    mailx -s "SERVEUR_DOWN" $destinataire
    touch /home/thomas/down
     
    fi
    if ["${z}" = "0"] && ["${a}" = "0"]
    then
    rm $testtemp
    mailx -s "SERVEUR UP" $destinataire
    fi
    if [ "${z}" = "1" ] 
    then 
    echo  `date` "SERVEUR DOWN " >> $logdr
    fi
    if [ "${z}" = "0" ] 
    then 
    echo  `date` "SERVEUR UP " >> $logdr
    fi
    bon a priori ca marche pas donc si on pouvait m'aider ce serait ma foi trés gentil x)))))

  4. #4
    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
    Bonjour.

    ça ne marche pas
    ça n'est pas très clair.

    • Tu as vu que tu changeais ta façon d'écrire d'un if à l'autre ? les espaces sont importants.
    • Tu devrais indenter ton code.
    • Quel est l'intérêt de créer un fichier testtemp ?
    • Tu envoies un mail vide ?
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Par défaut
    J'ai fais pas mal d'arrangement..

    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
    #!/bin/bash
    destinataire=testtesttest@gerancecenter.com 
    site1=www.qdfqsfodskfo.com	
    logfile=/var/log/serv
    site2=www.qfsdlqfksd.com
    site3=www.azepozrpls.com
    for k in site1 site2 site3 
    do
    wget --timeout=1 $k
    z=$?
    test -f /temp/$k
    a=$?
    # serveur down, fichier log non créé => envoi d'un mail
    if [ "${z}" = "1" ] & ["${a}" = "1" ]
    then
    mailx -s "SERVEUR_DOWN" $destinataire
    touch /temp/$k
    echo  `date` "SERVEUR DOWN " >> $logdr
    fi
    # serveur up, fichier log créé => envoi d'un mail
    if [${z} = 0] & ["${a}" = "0"] 
    then
    rm /temp/$k
    mailx -s "SERVEUR UP" $destinataire
    echo  `date` "SERVEUR UP " >> $logdr
    fi
    done
    Pour répondre a tes questions :
    1) modifié
    2)indenter?
    3)le fichier testtemp me permet d'envoyer un seul mail pr signifier que le serveur down, sinon étant donné que c'est un daemon qui tourne toutes les minutes en cas de down d'une heure je me tape 60emails...
    4) je trouve ni sur le man ni sur le net comment inclure directement le body du message dans la ligne de commande.

  6. #6
    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
    http://fr.wikipedia.org/wiki/Indentation#Informatique

    un petit exemple :

    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
    45
    #!/bin/bash
     
    data_directory=/var/lib/wakewatcher
    computer=nomdordi
    mail_sent="$data_directory"/"$computer"
     
    mail_body_file=$(mktemp)
    mail_subject="[Message automatique] Alerte:$computer $(date) "
    mailing_list="adresse@bla.com"
     
    ping_test=$( ping -c3 -f $computer | grep " 0% packet loss" )
     
    file_missing_error="Erreur : $mail_sent n'existe pas"
     
    (! test -f $mail_sent ) && echo $file_missing_error && exit
     
    # Ecriture du contenu du message dans un fichier temporaire
    write_mail_body()
    {
    cat << EOF >> $mail_body_file
    Bonjour.
     
    L'ordinateur $computer ne repond pas.
    Il se peut qu'il soit eteint.
    Il se peut egalement qu'il ne reponde pas a cause d'une defaillance du reseau.
     
    Cordialement.
    EOF
    }
     
    # si l'on ne recupere rien, c'est que le ping n'a pas eu lieu correctement, et donc que l'ordi est eteint
    if [ -z "$ping_test" ] ; then
            # si l'on a deja envoye un mail, pas besoin d'en renvoyer un
            if [ $(cat $mail_sent) = "1" ] ; then
                    exit
            # sinon on l'envoie
            else
                    write_mail_body
                    #sans oublier de signaler qu'on l'a envoye dans le fichier
                    ( mail -s "$mail_subject" $mailing_list < $mail_body_file ) && echo 1 > $mail_sent
            fi
    else
            #Ecriture dans le fichier qu'on n'a pas envoye de mail, et pour cause, l'ordinateur repond
            ( test -d $src_directory ) && echo 0 > $mail_sent
    fi
    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

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Par défaut
    Tout d'abord merci de ta réponse plus que rapide.
    Ensuite :
    - je n'ai pas utilisé la commande ping car mon pc est en réseau locale avec le pc qui sert de serveur, donc le ping renverra toujours qqchose. Je veux en fait vérifier que le serveur web set up, dsl si je ne l'avais pas proposé ://
    - le contenu du message est inutile pour ce dont j'ai besoin
    - pour finir, je ne vois pas vrt comment dans le cas d'un daemon exécuté toutes les minutes le mail ne va pas s'envoyer tjs...

    ps : je suis vraiment débutant donc je m'excuse d'avance si je pose des questions stupides :/
    ps2 : sans vouloir paraître borné, j'aimerais que tu me dises ce qui cloche dans mon script (notament pour l'emploi de la boucle for k in), et ce afin de progresser et de prendre en compte mes erreurs.

    Merci

  8. #8
    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
    mon script ne fait effectivement pas ce que tu veux.

    Mais il a l'avantage :
    • d'être indenté
    • d'être commenté
    • de te montrer comment on peut envoyer du texte via mail
    • d'utiliser des fonctions qui rendent le code plus clair
    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

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Par défaut
    Tu me donnes un poisson au lieu de m'apprendre a pêcher là :-(((((((

  10. #10
    Membre Expert
    Profil pro
    Fabrication GED
    Inscrit en
    Octobre 2005
    Messages
    1 405
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France, Seine Maritime (Haute Normandie)

    Informations professionnelles :
    Activité : Fabrication GED

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 405
    Par défaut
    Tu as un problème d'algo (notions de programmation en clair).

    Tu ecris :
    Si les deux codes-retour sont égaux à 1, j'envois un message.
    --> ça veut dire que si un seul d'entre eux est bon (presence fichier ou bien wget ok), tu n'envois pas le message. En plus, tu ne prends pas en compte le fait qu'une commande retourne un code erreur différent de 1 (code erreur = de 1 à 255).

    Moi j'écrirais :
    Si mon premier code retour est différent de 0 OU mon deuxieme code retour est différent de 0, j'envois un message.
    --> Si une erreur survient d'en l'une des deux commandes j'envois le message.

    --> Une petite révision des opérateurs logiques semble nécessaire.
    Je te laisse méditer à ça...

  11. #11
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2008
    Messages
    84
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2008
    Messages : 84
    Par défaut
    Citation Envoyé par iohack Voir le message
    Tu as un problème d'algo (notions de programmation en clair).

    Tu ecris :
    Si les deux codes-retour sont égaux à 1, j'envois un message.
    --> ça veut dire que si un seul d'entre eux est bon (presence fichier ou bien wget ok), tu n'envois pas le message. En plus, tu ne prends pas en compte le fait qu'une commande retourne un code erreur différent de 1 (code erreur = de 1 à 255).
    ..
    j'avais fais une erreur que j'ai changé, mais la logique du "ET" est volontaire, puisque j'ai deux conditions a l'envoi du mail. Je vous met le script final qui semble marché :

    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
    #!/bin/bash
    destinataire="mail0l@gerancecenter.com <a href="mailto:mail1@gerancecenter.com">mail1@gerancecenter.com</a> <a href="mailto:mail2@gerancecenter.com">mail2@gerancecenter.com</a>"
    site1="site"	
    logfile="/var/log/serv"
    tmpfile="/tmp/serv"
    wget --timeout=1 $site1
    z=$?
    test -f /tmp/serv
    a=$?
    if [ ${z} = 1 ] & [${a} = 0]
    then
    mailx -s "***** SERVEUR DOWN *****" $destinataire
    touch $tmpfile
    echo  `date` "SERVEUR DOWN " >> $logfile
    if [${z} = 0] & [${a} = 1] 
    then
    rm $tmpfile
    mailx -s "***** SERVEUR UP *****" $destinataire
    echo  `date` "SERVEUR UP " >> $logfile
    fi

Discussions similaires

  1. Verification du serveur émetteur via une servlet
    Par Alexr dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 29/04/2010, 10h52
  2. [batch] [services windows] état service sur serveur distant
    Par Deadpool dans le forum Scripts/Batch
    Réponses: 3
    Dernier message: 16/03/2009, 17h50
  3. Commande qui renvoi état serveur
    Par kloorane dans le forum Weblogic
    Réponses: 2
    Dernier message: 11/05/2007, 11h16
  4. états de l'art serveurs OLAP ????
    Par greatmaster1971 dans le forum Décisions SGBD
    Réponses: 7
    Dernier message: 17/10/2003, 13h53

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