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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  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

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