2010-04-16 4 views

Répondre

2

Si tout ce que vous essayez de faire est de déclencher un tas de commandes à distance, vous pouvez simplement utiliser Perl. Vous pouvez "ouvrir" une commande ssh et rediriger les résultats vers perl. (Vous devez bien sûr de mettre en place des clés pour permettre un accès sans mot de passe)

open (REMOTE, "ssh [email protected] \"myScript\"|"); 
while (<REMOTE>) 
{ 
    print $_; 
} 

Vous voudriez concevoir une boucle avec vos noms de machine, et déclencher un pour chacun. Après cela, faites simplement des lectures non bloquantes sur les handles de fichiers pour récupérer les données dès qu'elles sont disponibles.

1

parallel peut être installé sur votre noeud central et peut être utilisé pour exécuter une commande sur plusieurs machines.

Dans l'exemple ci-dessous, plusieurs connexions ssh sont utilisées pour exécuter des commandes sur les hôtes distants. (-j est le nombre de tâches à exécuter en même temps sur le noeud central). Le résultat peut ensuite être redirigé vers des commandes pour effectuer l'étape "réduire". (trier puis uniq dans cet exemple).

parallèles -j 50 ssh {} "ls" ::: host1 host2 hostn | trier | uniq -c

Cet exemple suppose « connexion ssh sans clé » a été mis en place entre le noeud central et toutes les machines du cluster.

Il peut être difficile d'échapper correctement les caractères lors de l'exécution de commandes plus complexes qui "ls" à distance, vous devez parfois échapper le caractère d'échappement. Vous mentionnez bashreduce, cela peut simplifier cela.

Questions connexes