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 :

Lancer un script/commande sur plusieurs serveurs distants


Sujet :

Shell et commandes GNU

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut Lancer un script/commande sur plusieurs serveurs distants
    Dans mon home de la machine « cairo », j’ai un fichier contenant une liste de serveurs « servers ». Sur chaque serveur, il y a plusieurs instances apache qui doivent être arrêtées et redémarrés si elles étaient déjà démarrées. Sur chacun des serveurs, je souhaite lancer à partir de « cairo » un script d’arrêt/démarrage « stopstart.sh » pour faire cela :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #!/bin/sh
     
    for VAR in /prod/*/apache2
     
    sudo $VAR/bin/apachectl stop
     
    sudo $VAR/bin/apachectl start
     
    done
    1) Comment ajouter cette contrainte : pour chaque instance vérifier d’abord si elle est bien démarrée (avec par exemple le code retour de : « ps - eaf | grep –v | grep httpd <nom_instance> »), et si et seulement si c’est le cas, alors exécuter le stop/start, sinon ne rien faire...

    2) Comment récupérer les erreurs formatées par machine et par instance ainsi que la sortie standard de chaque machine (notamment le code retour indiquant si l’instance est démarrée ou non et le résultat des sudo stop/start ) :
    a) sur l'écran de « cairo »?
    b) dans un fichier sur « cairo » : /home/user, le fichier est bien formaté pour bien comprendre qu’il s’agit de tel serveur et de telle instance…?

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Ouais, bonjour, s'il vous plait, merci, au revoir c'est quand tu veux. Et apparemment on voit bien que tu veux pas.

    Citation Envoyé par bras39 Voir le message
    1) Comment ajouter cette contrainte : pour chaque instance vérifier d’abord si elle est bien démarrée (avec par exemple le code retour de : « ps - eaf | grep –v | grep httpd <nom_instance> »), et si et seulement si c’est le cas, alors exécuter le stop/start, sinon ne rien faire...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    if ps - eaf  | grep –v | grep httpd <nom_instance>
    then
        sudo $VAR/bin/apachectl stop
        sudo $VAR/bin/apachectl start
    fi

    Citation Envoyé par bras39 Voir le message
    2) Comment récupérer les erreurs formatées par machine et par instance ainsi que la sortie standard de chaque machine (notamment le code retour indiquant si l’instance est démarrée ou non et le résultat des sudo stop/start ) :
    a) sur l'écran de « cairo »?
    b) dans un fichier sur « cairo » : /home/user, le fichier est bien formaté pour bien comprendre qu’il s’agit de tel serveur et de telle instance…?
    Avec des redirections
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ouais, bonjour, s'il vous plait, merci, au revoir c'est quand tu veux. Et apparemment on voit bien que tu veux pas.
    T'as raison, méaculpa...

    Bonsoir Sve@r, Bonsoir tous les autres;

    Ca ne marche pas, car je ne suis pas sûr de ce qu'il faut faire avec <nom_instance> !! Voici mon code qui ne marche pas ni par les instances démarées ni pour les redirections (Merci de ne pas rigolez de moi )

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for VAR in /prod/*/apache2
     
    do
    if ps - eaf  | grep –v | grep httpd $VAR
     
    then
        sudo $VAR/bin/apachectl stop 1> logs 2>&1
        sudo $VAR/bin/apachectl start  1> logs 2>&1
    fi
     
    echo "l'instance $VAR est actuellement démarrée sur $HOSTNAME, elle a donc être arrêtée et démarrée" >> logs 
     
    done


    Citation Envoyé par Sve@r Voir le message
    Avec des redirections
    Les rédirections que j'ai mis plus au dans mon code ne donne rien ni sur l'écran "cairo" ni dans mon fichier "logs", comment faire ?!

    D'avance Merci de votre aide

  4. #4
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bras39 Voir le message
    T'as raison, méaculpa...

    Bonsoir Sve@r, Bonsoir tous les autres;

    Ca ne marche pas, car je ne suis pas sûr de ce qu'il faut faire avec <nom_instance> !! Voici mon code qui ne marche pas ni par les instances démarées ni pour les redirections (Merci de ne pas rigolez de moi )

    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    for VAR in /prod/*/apache2
     
    do
    if ps - eaf  | grep –v | grep httpd $VAR
     
    then
        sudo $VAR/bin/apachectl stop 1> logs 2>&1
        sudo $VAR/bin/apachectl start  1> logs 2>&1
    fi
     
    echo "l'instance $VAR est actuellement démarrée sur $HOSTNAME, elle a donc être arrêtée et démarrée" >> logs 
     
    done
    Je ne comprends pas trop. Tu parles "d'instance" mais tel que ton script est écrit, $VAR contient un nom de dossier !!!

    Citation Envoyé par bras39 Voir le message
    Les rédirections que j'ai mis plus au dans mon code ne donne rien ni sur l'écran "cairo" ni dans mon fichier "logs", comment faire ?!
    Ben oui !!! La seconde redirection écrase la première !!!
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (
        sudo $VAR/bin/apachectl stop
        sudo $VAR/bin/apachectl start
    ) 1>logs 2>&1
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2011
    Messages
    1 946
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2011
    Messages : 1 946
    Par défaut
    Salut,

    Je doute que ton script dépasse le stade du "if"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ps - eaf  | grep –v | grep httpd $VAR
    ps - eaf => ça ça ne fait rien, sinon une erreur (ps -eaf sans espace entre le tiret et les options)

    grep –v => là il faut une option après le "-v" Que veux-tu exclure de la recherche ?

  6. #6
    Membre averti
    Femme Profil pro
    Inscrit en
    Septembre 2011
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2011
    Messages : 54
    Par défaut
    Bonsoir à tout le monde,

    Citation Envoyé par Sve@r Voir le message
    Je ne comprends pas trop. Tu parles "d'instance" mais tel que ton script est écrit, $VAR contient un nom de dossier !!!
    Il y a même pire! Quand je fais un : echo "il y a $VAR actives", j'ai comme retour : /prod/{WEBLO, APA, SPHER, etc.}/apache2/... où WEBLO, APA, etc. sont les noms de mes instances que je retrouve sous la forme suivante avec la commande "ps -eaf |grep httpd" :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     ../../bin/httpd -f  /prod/{WEBLO, APA, SPHER, etc.}/apache2/conf/httpd.conf -k start
    Or mon souhait c'est de ne me retrouver qu'avec le seul nom de l'instance et non pas tout son chemin absolu !!

    zip31 : bien vu ! MAis je pense que chacun avait corrigé lors de la frappe (y compris moi-même )



    Citation Envoyé par Sve@r Voir le message
    Ben oui !!! La seconde redirection écrase la première !!!
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    (
        sudo $VAR/bin/apachectl stop
        sudo $VAR/bin/apachectl start
    ) 1>logs 2>&1
    Et comment dans ce cas, je peux ajouter mon fameux commentaire : echo "l'instance $VAR est actuellement démarrée sur $HOSTNAME, elle a donc être arrêtée et démarrée" ?

    Quid de l'affichage sur l'écran de ma machine locale ?

    Merci

  7. #7
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 814
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par bras39 Voir le message
    Et comment dans ce cas, je peux ajouter mon fameux commentaire : echo "l'instance $VAR est actuellement démarrée sur $HOSTNAME, elle a donc être arrêtée et démarrée" ?
    Tu fais vraiment pas d'effort pour analyser le code donné afin de comprendre son principe afin de l'adapter à ton besoin !!!
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (
        echo "l'instance $VAR est actuellement démarrée sur $HOSTNAME, elle a donc être arrêtée et démarrée"
        sudo $VAR/bin/apachectl stop
        sudo $VAR/bin/apachectl start
    ) 1>logs 2>&1

    Citation Envoyé par bras39 Voir le message
    Quid de l'affichage sur l'écran de ma machine locale ?
    Ah ben une redirection a pour but de rediriger l'affichage vers autre chose que l'écran. Donc redirection => plus rien sur l'écran !!!

    Si tu veux garder l'écran, alors faut utiliser la commande tee qui écrit ce qu'on lui donne à l'écran tout en le dédoublant aussi vers un fichier...
    Code bash : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    (
        echo "l'instance $VAR est actuellement démarrée sur $HOSTNAME, elle a donc être arrêtée et démarrée"
        sudo $VAR/bin/apachectl stop
        sudo $VAR/bin/apachectl start
    ) |tee logs
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

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

Discussions similaires

  1. [PowerShell] Inventorier les KB sur plusieurs serveurs distants
    Par bouba_69 dans le forum Scripts/Batch
    Réponses: 4
    Dernier message: 15/02/2012, 14h16
  2. lancer un script shell sur un serveur distant avec php
    Par MSM_007 dans le forum Langage
    Réponses: 1
    Dernier message: 03/05/2010, 11h32
  3. lancer une application java sur un serveur distant en exécutant un script shell
    Par M_Dandouna dans le forum Shell et commandes GNU
    Réponses: 1
    Dernier message: 12/06/2008, 14h40
  4. Réponses: 0
    Dernier message: 27/11/2007, 14h37
  5. Lancer une page HTML sur un serveur distant
    Par Larion dans le forum VBScript
    Réponses: 5
    Dernier message: 14/08/2006, 08h34

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