Linux - Auf vielen Rechnern den gleichen Befehl gleichzeitig ausführen


39

Ich habe ungefähr ein Dutzend Linux-Boxen, auf denen ich gelegentlich dieselben Befehle ausführen muss. Gibt es eine einfachere (oder automatisierte) Möglichkeit, dies zu tun, als sich bei jedem Computer anzumelden und den Befehl einzeln auszuführen? Es sind nicht immer die gleichen Befehle und es ist nicht zu einer voreingestellten Zeit, also ist es nicht ideal für Werkzeuge wie cron.



Endlich die kanonische Liste :)
Rogerdpack

Antworten:


12

Hm, vielleicht ist pconsole das Werkzeug, das Sie wollen.


Wow, Pconsole sieht ziemlich cool aus! Ich habe es ohne Probleme installiert und es sieht so weit großartig aus. Vielen Dank!
Chris Bunch

Es ist auch eines meiner Lieblingswerkzeuge. :) np
Node


8

Sie sollten herausfinden, dass Puppet hier ein linux.com- Artikel über seine Einrichtung und Verwendung ist


1
Hmm, Puppet sieht ziemlich interessant aus. Ich werde es mir ansehen, wenn Pconsole mir nicht mehr weiterhilft, da ich es bereits zum Laufen gebracht habe und es einfacher ist, als Puppets Sprache zu lernen. Vielen Dank für den Vorschlag!
Chris Bunch

Insbesondere das Marionette Collective-Tool (auch mcollective oder mco genannt). Es ist ein Teil von Puppet, mit dem Sie Dinge auf der Basis von Puppet-Fakten auf einer Gruppe von Hosts erledigen können.
Brian Minton


8

Sie können Capistrano versuchen . Ursprünglich war es ein Rails-Bereitstellungstool, aber es wurde erweitert, um viele Aufgaben mit Remote-Computern zu erledigen.

Um einen umfassenderen Zugang zur Verwaltung mehrerer Computer zu erhalten, sollten Sie Chef ausprobieren .



6

Ich werde wohl meine Antwort aus Stack Overflow kopieren und einfügen , was den Leuten anscheinend gefallen hat. . .


Die Frage, wie man Befehle auf vielen Servern gleichzeitig ausführt, tauchte neulich auf einer Perl-Mailingliste auf, und ich gebe die gleiche Empfehlung, die ich dort gegeben habe , nämlich gsh: http://outflux.net/unix/. software / gsh

gsh ähnelt der " for box in box1_name box2_name box3_name" bereits gegebenen Lösung, aber ich finde gsh praktischer. Sie richten eine / etc / ghosts-Datei ein, die Ihre Server in Gruppen wie web, db, RHEL4, x86_64 oder was auch immer (man ghosts) enthält. Dann verwenden Sie diese Gruppe, wenn Sie gsh aufrufen.

[pdurbin@beamish ~]$ gsh web "cat /etc/redhat-release; uname -r"
www-2.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-2.foo.com: 2.6.9-78.0.1.ELsmp
www-3.foo.com: Red Hat Enterprise Linux AS release 4 (Nahant Update 7)
www-3.foo.com: 2.6.9-78.0.1.ELsmp
www-4.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-4.foo.com: 2.6.18-92.1.13.el5
www-5.foo.com: Red Hat Enterprise Linux Server release 5.2 (Tikanga)
www-5.foo.com: 2.6.18-92.1.13.el5
[pdurbin@beamish ~]$

Sie können auch Geistergruppen kombinieren oder aufteilen, z. B. mit web + db oder web-RHEL4.

Ich erwähne auch, dass die Website von shmux, obwohl ich sie noch nie verwendet habe, eine Liste von Software (einschließlich gsh) enthält, mit der Sie Befehle auf vielen Servern gleichzeitig ausführen können. Capistrano wurde bereits erwähnt und könnte (soweit ich weiß) auch auf dieser Liste stehen.


5

Wenn Sie sich auf einem KDE-Desktop befinden, hat konsole die Option "Eingabe an alle Sitzungen senden". Dies gilt für alle Sitzungen, die im selben Konsolenfenster geöffnet sind.


5

Sie können auch versuchen, ssh [user@]hostname [command]die Hostnamen zu durchlaufen.


2
Dies erfüllt den Teil "auf einmal" nicht wirklich (es ist serialisiert, nicht parallel), aber da dies keine Anforderung für den Körper der Frage zu sein scheint, kann dies auch eine anständige Lösung sein.
voretaq7

4

Schauen Sie sich auch func an. Mit Func können Sie eine Modularchitektur verwenden, um verschiedene Aspekte eines Systems zu steuern, vom Umgang mit Paketen über das Ausführen von Befehlen usw. Es funktioniert auf einem Client / Server-Modul über SSL und verfügt auch über ein ziemlich flexibles Authentifizierungsschema.


Gleichzeitig wird Func von Red Hat entwickelt und wird voraussichtlich in zukünftigen Fedora / RHEL-Produkten verstärkt eingesetzt. Dies ist definitiv eine zu beobachtende Sache, da ich davon ausgehe, dass sie die De-facto-Standardlösung für diese Art von Problem sein wird.
Christopher Cashell

4

Ich habe ClusterSSH verwendet und es funktioniert. Ab einer bestimmten Anzahl von Terminals lässt es sich jedoch nicht gut skalieren.

Ich bin überrascht, dass niemand Xargs erwähnt hat. Xargs ist perfekt für die meisten Dinge. Tatsächlich habe ich es mir so bequem gemacht, dass ich nie mehr Clustersh verwende.

Beispiel

echo -n host1 host2 host3 host4|xargs -d" " -n1 -P30 -I+ ssh + "sudo service apache2 restart"

(Starten Sie Apache auf allen Webhosts neu.)


Für Follower -P30bedeutet der Teil "30 von ihnen gleichzeitig
ausführen

4

Wenn Sie bereits ein tmux-Benutzer sind, könnte Ihnen tmux-cssh (steht für TMUX-C(luster)-SSH) gefallen . Sie geben ihm eine Liste mit Servernamen und es öffnet sich ein neues tmux-Fenster mit einer SSH-Sitzung, die für jeden Server in einem eigenen Bereich geöffnet ist. Alle Tastenanschläge werden in jedes Fenster kopiert. Abhängig von der Anzahl der Hosts kann die Ausgabe schwer lesbar sein.


1
Einzeilige Links sind nicht unbedingt nützlich. Bitte beschreibend. Warum empfehlen Sie dieses Tool?
Deer Hunter

3

Andere Werkzeuge sind:

RunDeck könnte auch als leichtgewichtiger ControlTier bezeichnet werden.

Mit diesen Tools erhalten Sie nicht nur eine Cluster-Shell, sondern auch ein Web-Frontend, und Sie können Ihre Jobs für die zukünftige Verwendung speichern.


2

Sie können auch Cluster-SSH (cssh) ausprobieren. Ich habe es nicht benutzt, aber es gibt einen Artikel auf LinuxJournal.com mit dem Titel "Mehrere Server effizient verwalten", der darüber spricht.


1

Verwenden Sie Teller , einfach und sehr kraftvoll! Dieses Drehbuch hat mein Leben verändert :) Ein Drehbuch, um sie alle zu beherrschen!

http://nic-nac-project.org/~drimiks/gnu/dish.shtml

Die Diligence-Shell 'dish' führt auf mehreren Systemen gleichzeitig Befehle über ssh / rsh / telnet / mysql aus. Das Ändern des Passworts, das Aktualisieren der Konfiguration, das Kopieren von Dateien, das Überprüfen des Status usw. auf Hunderten von Knoten ist dann ganz einfach. Dish ähnelt der 'dsh' (Distributed Shell) von IBM, ermöglicht aber auch die Remote-Ausführung von Befehlen, die eine Authentifizierung erfordern. Verglichen mit anderen Open-Source-Paketen, die eine verteilte Shell (oder ähnliche Tools) wie ClusterIt, Tänzershell, parallele verteilte Shell oder C3 enthalten, ist dish ein schlanker und einfach zu verwendender Remote-Shell-Wrapper für Fälle, in denen eine flexible Lösung erforderlich ist. Sie können die Handbuchseite des Gerichts hier online durchsuchen.


1

Hier einige Beispiele mit den Befehlen, die in anderen Antworten erwähnt wurden:

pdsh

Kann numerische Bereiche annehmen, Ausgaben mit dem Hostnamen zuerst, scheint tatsächlich erhalten zu sein :

einfachste Version:

pdsh -w hostname echo done

Ausgabe:

hostname: done

Komplizierteres Beispiel:

pdsh -w username@hostname[7-8],username@otherhost "sleep 5 && echo done"

Ausgabe:

hostname8: done
hostname7: done
otherhost: done

Mac: brew install pdsh

dsh

dsh -m user@host,user@host --remoteshell ssh --concurrent-shell -- "sleep 5 && echo done"

Benötigen Sie eine Remote-Shell-Einstellung, andernfalls wird "rsh" verwendet, das möglicherweise nicht verfügbar ist.

Mac: brew install dsh

pssh

pssh -i -H user@host -H user@host "sleep 5 && echo done"

Sie können alle optional auch eine Liste von Maschinen aus einer Datei entnehmen.

Fühlen Sie sich frei, hier weitere Beispiele hinzuzufügen, es ist ein Community-Wiki

Mac: brew install pssh

Cluster SSH

Cluster-SSH (bei der "Nur-Mac-Version" gibt es anscheinend zwei Versionen, die andere ist hier ) öffnet tatsächlich "echte Terminals" mit einem großen Terminal am unteren Rand, das Eingaben an alle anderen sendet. Es ist also wie eine Benutzeroberfläche, die es an mehrere sendet.

Ex:

csshX hostname0[1-2] hostname3 Geben Sie dann in das rote Feld ein und es wird zu jedem Terminalfenster, eines pro Host, das angezeigt wird, gewechselt.

mac: brew install csshx(eine alte version funktioniert aber immer noch)

es gibt auch ein brew install ansibleFWIW

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.