Forum Programmation.shell Lancer un programme sur 10 serveurs

Posté par  .
Étiquettes : aucune
0
14
sept.
2006
Bonjour,
J'ai 10 serveurs sous Linux et je souhaiterais exécuter un programme sur chacun d'eux à partir d'un script shell sur l'un deux.

J'ai donc fais la boucle suivante :

for node in $LISTE_SERVEURS
do
ssh ${node} "nmon -f -c $nbSnap -s $duree"
done


Le problème est que le shell me garde la main le temps que l'application s'exécute (le programme est fait pour s'exécuter pendant $nbSnap * $duree).

Je ne sais pas comment m'en sortir, merci d'avance pour votre aide
  • # Detach...

    Posté par  . Évalué à 3.

    Ben la solution que je vois c'est de le detacher du terminal :
    ssh ${node} "nmon -f -c $nbSnap -s $duree" &
    Et si tu as besoin des resultats, tu rediriges la sortie standard (et aussi peut etre la sortie d'erreur)

    ssh ${node} "nmon -f -c $nbSnap -s $duree" > file-{$node} 2>&1 &

    Ca marche tres bien chez moi.
    • [^] # Re: Detach...

      Posté par  . Évalué à 1.

      J'ai déjà essayé comme cela et cela ne fonctionnait pas. Je viens de résoudre le problème en trustant les machines. Je ne sais pas pourquoi mais lorsque l'on doit taper le mot de passe, cela ne fonctionne pas.

      Une idée?

      En tout cas, merci pour ton aide.
      • [^] # Re: Detach...

        Posté par  (site web personnel) . Évalué à 2.

        Comme dit plus bas, il faut utiliser l'option -f (ou "-o BatchMode yes" si tu as un OpenSSH périmé).

        pertinent adj. Approprié : qui se rapporte exactement à ce dont il est question.

  • # xinetd

    Posté par  . Évalué à 2.

    Xinetd est aussi très pratique pour ce genre de problème, sauf si tu désire à tout pris un authentification.

    Il suffit de faire un script bash ou autre qui lit sur l'entrée standard tes donées puis exécute la commande. Tu peux redirigé la sortie de ton programme vers la sortie standard du script si tu le désire. tu crée le fichier de config xinetd pour qu'il execute ce script quand une connexion arrive sur un port choisi. Ensuite sur depuis ton pc, tu fais un echo "data1 data2" > netcat --avec --les --options --qui --vont --biens &.
  • # Avec l'option -f de ssh ?

    Posté par  (site web personnel) . Évalué à 3.

    Il me semble que l'option -f de SSH est prévue pour ça, non ?
    (cf. man ssh)

    https://damien.pobel.fr

  • # pdsh

    Posté par  . Évalué à 1.

    Utilise pdsh (parallel distributed shell), c'est fait pour ce genre de pbs: http://sourceforge.net/projects/pdsh/.
    Cela fonctionne tres bien sur plusieurs centaines de machines a la fois.
  • # Télédistribution

    Posté par  . Évalué à 1.

    Supposons que tu es un des serveurs du cluster en panne ou non disponible...
    Je te propose d'utiliser OCS Inventory, qui fournit une solution de télédistribution de packages et d'exécution de commandes par agent.
    http://ocsinventory.sourceforge.net/
  • # -x

    Posté par  (site web personnel) . Évalué à 1.

    for node in $LISTE_SERVEURS

    do

    ssh -x ${node} "nmon -f -c $nbSnap -s $duree"

    done

    J'utilise ca pour faire une copie de fichiers ver le serveur de notre midleware (openssh cygwin sous windows) et je lance dans la foulée le script windows "script.cmd".

    Le tout lancé par crond tous les soirs à 20h00.

    genre :

    00 20 * * * scp /rep/source/fichier user@midleware:/rep/target/ && ssh -s /chemin/vers/script.cmd

    A++
    • [^] # Re: -x

      Posté par  (site web personnel) . Évalué à 1.

      OOPS !!!

      Syntaxe précise en prod actuellement (les chemins et noms de progs changés) :

      00 20 * * * scp /rep/source/fichier.csv Administrateur@midleware:"/rep/target/" && ssh -x administrateur@midleware /chemin/vers/script.cmd '</dev/null >&/dev/null &'

      A++

Suivre le flux des commentaires

Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.