Also habe ich eine while-Schleife:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Dies kann jedoch lange dauern. Wie würde ich GNU Parallel für diese while-Schleife verwenden?
shell-script
files
gnu-parallel
Proletariat
quelle
quelle
tee
mit zu verwenden,parallel
wenn Sie die Ausgabe in setzensortedstuff
? So kann ich die Ausgabe sehen, wie es geht.>
mit| tee
zB der erste Befehl wirdparallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
Als ein Unix-Typ der alten Schule "mache eine Sache und mache es gut", würde ich das String-Substitutions-Zeug in ein Wrapper-Skript schreiben:
Wenn Sie es aufrufen
wrapper.sh
, wäre derparallel
Befehl zum Aufrufen:Beachten Sie, dass Sie so etwas nicht benötigen
cat
, was einen externen Programmaufruf erspart.quelle
Dies ist nicht erforderlich
parallel
, da der Rumpf der Schleife nicht von vorherigen Iterationen abhängt. Starten Sie einfach einen neuen Hintergrundprozess für jeden Host.parallel
erleichtert es jedoch, bestimmte Aspekte zu verwalten; Sie können die Anzahl der parallel laufenden Jobs einfacher begrenzen.quelle
wc -l live_hosts
mehr als die Anzahl der Plattenspindeln oder CPU-Kerne vorhanden ist - je nachdem, ob es sich um eine E / A- oder eine CPU-gebundene Aufgabe handelt -, werden Sie viel von dem Vorteil profitieren, den Sie durch die Parallelität mit einer solchen Lösung erzielen. Die Möglichkeitparallel
, die Anzahl der Jobs zu begrenzen, ist nicht nur gut, sondern auch äußerst wichtig, wenn die Verarbeitungsgeschwindigkeit Ihr Ziel ist.