wie man eine Prozess-Pool-Bash-Shell schreibt
Habe ich mehr als 10 Aufgaben ausführen, und das system einschränken, dass es bei den meisten 4-Aufgaben können gleichzeitig ausgeführt werden.
Meine Aufgabe gestartet werden kann, wie:
myprog taskname
Wie kann ich schreiben Sie eine bash-shell-Skript zum ausführen dieser Aufgabe. Das wichtigste ist, dass, wenn eine Aufgabe fertig ist, kann das script starten Sie ein anderes sofort, so dass die Laufenden Aufgaben zählen, bleiben 4 die ganze Zeit.
InformationsquelleAutor der Frage Sili | 2011-06-22
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ich zufällig auf diesen thread beim Blick auf das schreiben meiner eigenen pool und besonders mochte Brandon Horsley ' s Lösung, aber ich konnte nicht die Signale richtig funktionieren, so dass ich nahm inspiration von Apache und beschlossen, zu versuchen, eine pre-fork-Modell mit einem fifo als mein job-Warteschlange.
Die folgende Funktion ist die Funktion, dass die worker Prozesse führen, wenn die Gabel.
Können Sie Holen Sie sich eine Kopie von meiner Lösung auf Github. Hier ist ein Beispiel-Programm mit meiner Umsetzung.
Hoffe, das hilft!
InformationsquelleAutor der Antwort thelazyenginerd
Verwenden
xargs
:Details hier.
InformationsquelleAutor der Antwort Parag Sarda
Mit GNU Parallel, die Sie tun können:
Wenn du 4 Kerne, kannst du auch einfach tun:
Vom http://git.savannah.gnu.org/cgit/parallel.git/tree/README:
Vollständige installation
Vollständige installation von GNU Parallel ist so einfach wie:
Persönliche installation
Wenn Sie nicht root sind, können Sie fügen Sie ~/bin zu Ihrem Pfad und installieren Sie Sie
~/bin und ~/share:
Oder wenn Ihr system fehlt 'machen' Sie können einfach kopieren Sie src/parallel
src/sem src/niceload src/sql die dir im Weg liegen.
Minimal-installation
Wenn Sie nur parallel und nicht 'make' installiert (vielleicht die
system ist alt oder Microsoft Windows):
Test der installation
Danach sollten Sie in der Lage sein zu tun:
Dieser schicken 3 ping-Pakete an 3 verschiedenen Rechnern parallel und print
die Ausgabe, wenn Sie vollständig sind.
Sehen Sie das intro-video für eine schnelle Einführung:
https://www.youtube.com/playlist?list=PL284C9FF2488BC6D1
InformationsquelleAutor der Antwort Ole Tange
Ich würde vorschlagen, schreiben vier scripts, von denen jeder führt eine bestimmte Anzahl von Aufgaben in Serie. Dann schreiben Sie ein script gestartet wird, dass die vier scripts parallel. Zum Beispiel, wenn Sie Skripts, script1.sh, script2.sh, script3.sh und script4.sh können Sie ein Skript namens headscript.sh wie so.
InformationsquelleAutor der Antwort Zhehao Mao
Könnte Sie wahrscheinlich etwas clever mit Signale.
Hinweis: dies ist nur um zu veranschaulichen, das Konzept, und somit nicht ausgiebig getestet.
InformationsquelleAutor der Antwort Brandon Horsley
Getestet Skript läuft 5 jobs in einer Zeit, und starten Sie einen neuen job, sobald es nicht (wegen der Tötung des Schlaf-10.9, wenn wir ein SIGCHLD. Eine einfachere version dieser könnte direkt abrufen (ändern der sleep-10.9 schlafen 1 und loszuwerden, die Falle).
InformationsquelleAutor der Antwort Seth Robertson
Andere Antwort über 4 shell-Skripte nicht vollständig befriedigt mich, wie es wird davon ausgegangen, dass alle Aufgaben approximatelu der gleichen Zeit, und da es erfordert die manuelle Einrichtung. Aber hier ist, wie ich es noch verbessern.
Haupt-Skript erstellen, werden symbolische links auf ausführbare Dateien nach bestimmten namimg Konvention. Zum Beispiel,
erste Präfix ist für die Sortierung und-suffix identifiziert die batch - (01-04).
Jetzt haben wir spawn-4-shell-scripts, batch-Nummer, wie Sie Eingangs-und tun so etwas wie dieses
InformationsquelleAutor der Antwort Alex Gitelman
Blick auf meine Umsetzung des job-pool in bash: https://github.com/spektom/shell-utils/blob/master/jp.sh
Beispielsweise laufen bei den meisten 3-Prozesse von cURL, wenn das herunterladen aus einer Menge von URLs können Sie wickeln Sie Ihre cURL-Befehle wie folgt:
InformationsquelleAutor der Antwort spektom