Ich kann in eine entfernte Maschine ssh, die 64 Kerne hat. Nehmen wir an, ich muss auf diesem Computer 640 Shell-Skripte parallel ausführen. Wie mache ich das?
Ich kann sehen, die 640 Skripte in 64 Gruppen von jeweils 10 Skripten aufzuteilen. Wie würde ich dann jede dieser Gruppen parallel betreiben , dh eine Gruppe auf jedem der verfügbaren Kerne.
Wäre ein Skript des Formulars
./script_A &
./script_B &
./script_C &
...
wo script_A
entspricht die erste gruppe, script_B
die zweite gruppe etc. ausreichen?
Die Skripte in einer Gruppe, die auf einem Kern ausgeführt werden, können auch nacheinander ausgeführt werden, aber ich möchte, dass die Gruppen auf allen Kernen parallel ausgeführt werden.
parallelism
Tom
quelle
quelle
Antworten:
Das sieht nach einem Job für gnu parallel aus:
Der Vorteil ist, dass Sie Ihre Skripte nicht nach Kernen gruppieren müssen, sondern
parallel
dies für Sie tun.Wenn Sie die SSH-Sitzung nicht überwachen möchten, während die Skripts ausgeführt werden, sollten Sie natürlich
nohup
oder verwendenscreen
quelle
parallel
Paket daher nicht installieren . Thanks`bash -c
kann nicht benötigt:parallel ::: ./script*
. Mit 640-Skript ist es wahrscheinlich, dass sie sehr ähnlich sind (z. B. nur ein Argument ist anders). Verwenden Sie GNU Parallel direkt, um diese Argumente zu setzen und ein einzelnes Skript zu verwenden.Das funktioniert, solange Sie die Ausgabe nicht überwachen müssen und Ihre ssh-Sitzung so lange geöffnet bleibt, wie die Skripte ausgeführt werden. Wenn eine dieser Aussagen nicht zutrifft, würde ich die Verwendung
screen
mehrerer Registerkarten empfehlen . Sie könnten so etwas tunquelle
nohup
würde wahrscheinlich funktionieren, ich bin nur vertrauter mitscreen
und es hat viel mehr Funktionen, die für Sie nützlich sein können oder auch nicht.Um eine große Anzahl von Skriptaufträgen zu starten und zu verwalten, benötigen Sie eine Verwaltungssoftware, um die Ressourcennutzung (CPU, Speicher, Priorität) zu steuern und den Auftragsstatus (Warten, Anhalten, Ausführen, Beendet) anzuzeigen.
Die Grid-Engine wurde beispielsweise für Sun Grid Engine ( http://wiki.gridengine.info/wiki/index.php/Main_Page ) oder Open Grid Scheduler ( http://gridscheduler.sourceforge.net/ ) entwickelt. Sie benötigen den Administrator, um die richtige Software für Sie zu installieren, bevor Sie beginnen können. Möglicherweise kann der Administrator dies tun, anstatt zu sehen, dass Hunderte von Prozessen auf dem Computer ausgeführt werden und keine Kontrolle über sie haben.
Im Allgemeinen definiert der Administrator, in wie viele Slots eine Maschine unterteilt werden kann. Wenn Sie einen Job an eine Warteschlange übergeben und angeben, wie viele Slots der Job verbrauchen soll, überwacht die Grid-Engine die Gesamtsystemnutzung und führt den Job entsprechend aus die von admin definierte Warteschlangenrichtlinie. Zum Beispiel können nicht mehr als x Jobs gleichzeitig ausgeführt werden. Der Rest der Jobs befindet sich im Wartezustand in der Warteschlange und wird freigegeben, nachdem frühere Jobs beendet wurden.
quelle
Sie können die verteilte Shell ausprobieren. Herunterladen von: http://sourceforge.net/projects/dsh/
quelle
Ich habe das schon mehrmals gemacht und in der Regel nur mein eigenes Skript erstellt, um die Arbeit mit der Jobsteuerung zu erledigen. Im Allgemeinen sieht die Lösung folgendermaßen aus, wenn Sie die Namen aller Skripte haben, die Sie in einer Datei ausführen möchten:
Es ist rohe Gewalt, aber effektiv. Außerdem brauchen Sie keine zusätzliche Software, wie sie parallel zu Ihren Systemen hinzugefügt werden kann.
Ein großes Problem ist, dass der Befehl wait auf den Abschluss des langsamsten Skripts wartet, wodurch Zeit verschwendet werden kann. Ich habe Skripte erstellt, um diese Situation zu bewältigen, aber sie werden komplexer, wie Sie sich vorstellen können. Wenn alle Ihre Skripte ungefähr in der gleichen Zeit ausgeführt werden, funktioniert dies gut.
Ein weiteres Problem ist, dass Sie MAX_PROCS möglicherweise optimieren müssen, um die beste Leistung zu ermitteln.
Natürlich kann die Anzahl der SSH-Verbindungen unhandlich werden. Verschieben Sie in diesem Fall dieses Skript einfach auf den Remote-Host und ändern Sie die Zeile "ssh ...", um die Skripts direkt auszuführen.
quelle