GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Shell-Skript parallel ausführen

In der Dokumentation zu GNU parallel gibt es eine ganze Liste von Programmen, die Jobs parallel von einer Shell ausführen können, die sogar Vergleiche zwischen ihnen enthält. Es gibt viele, viele Lösungen da draußen. Eine weitere gute Nachricht ist, dass sie wahrscheinlich ziemlich effizient Jobs planen, sodass alle Kerne/Prozessoren zu jeder Zeit beschäftigt sind.


Um die Dinge parallel laufen zu lassen, verwenden Sie '&' am Ende eines Shell-Befehls, um ihn im Hintergrund auszuführen, dann wait wird standardmäßig (d. h. ohne Argumente) warten, bis alle Hintergrundprozesse beendet sind. Also, vielleicht 10 parallel starten, dann warten, dann noch 10 machen. Das geht ganz einfach mit zwei verschachtelten Schleifen.


Ein weiterer sehr praktischer Weg, dies zu tun, ist mit gnu parallel, das es sich lohnt zu installieren, wenn Sie es noch nicht haben; Dies ist von unschätzbarem Wert, wenn die Aufgaben nicht unbedingt die gleiche Zeit in Anspruch nehmen.

seq 1000 | parallel -j 8 --workdir $PWD ./myrun {}

wird ./myrun 1 starten , ./myrun 2 usw., um sicherzustellen, dass 8 Jobs gleichzeitig ausgeführt werden. Es kann auch Listen von Knoten aufnehmen, wenn Sie auf mehreren Knoten gleichzeitig laufen wollen, zB in einem PBS-Job; Unsere Anweisungen für unsere Benutzer, wie dies auf unserem System zu tun ist, finden Sie hier.

Aktualisiert um hinzuzufügen: Sie sollten sicherstellen, dass Sie gnu-parallel verwenden, nicht das eingeschränktere Dienstprogramm mit demselben Namen, das im moreutils-Paket enthalten ist (die unterschiedliche Geschichte der beiden wird hier beschrieben.)


Schauen Sie sich Bash-Subshells an, diese können verwendet werden, um Teile eines Skripts parallel auszuführen.

Ich habe das nicht getestet, aber das könnte ein Anfang sein:

#!/bin/bash
for i in $(seq 1 1000)
do
   ( Generating random numbers here , sorting  and outputting to file$i.txt ) &
   if (( $i % 10 == 0 )); then wait; fi # Limit to 10 concurrent subshells.
done
wait

Linux
  1. Zeitüberschreitung in einem Shell-Skript?

  2. Auf welcher Shell laufe ich?

  3. Möglichkeit, ein Shell-Skript immer als Root auszuführen?

  4. Wie führe ich ein Shell-Skript im Hintergrund aus?

  5. So führen Sie Python-Skripte von der Shell aus

So führen Sie einen Linux-Shell-Befehl / ein Skript im Hintergrund aus

So erstellen und führen Sie ein Shell-Skript in Debian 10 aus

So erstellen und führen Sie ein Shell-Skript in CentOS 8 aus

So führen Sie Shell-Skript als SystemD-Dienst in Linux aus

So führen Sie ein Bash-Skript aus

So erstellen und führen Sie ein Shell-Skript in Ubuntu 22.04 aus