Mam więc pętlę while:
cat live_hosts | while read host; do \
sortstuff.sh -a "$host" > sortedstuff-"$host"; done
Ale może to zająć dużo czasu. Jak miałbym używać GNU Parallel do tej pętli while?
shell-script
files
gnu-parallel
Proletariat
źródło
źródło
tee
zparallel
wprowadzaniem danych wyjściowychsortedstuff
? Widzę więc, jak wygląda wyjście.>
z| tee
np pierwsze polecenie stajeparallel "sortstuff.sh -a {} | tee sortedstuff-{}" <live_hosts
Jako oldschoolowy facet „zrób jedną rzecz i zrób to dobrze”, uniksowy facet, umieściłem substytucję ciągu znaków w skrypcie opakowania:
Jeśli go wywołasz
wrapper.sh
,parallel
polecenie wywołania będzie następujące:Zauważ, że nie potrzebujesz
cat
tego rodzaju rzeczy, które zapisują zewnętrzne wywołanie programu.źródło
Nie potrzebujesz
parallel
, ponieważ treść pętli nie zależy od poprzednich iteracji. Po prostu rozpocznij nowy proces w tle dla każdego hosta.parallel
ułatwia jednak zarządzanie niektórymi aspektami; łatwiej można ograniczyć liczbę zadań uruchomionych równolegle.źródło
wc -l live_hosts
jest większa niż liczba wrzecion dyskowych lub rdzeni procesora - w zależności od tego, czy zadanie dotyczy operacji we / wy, czy procesora - zużyjesz wiele korzyści wynikających z równoległości z takim rozwiązaniem. Możliwośćparallel
ograniczenia liczby zadań jest nie tylko przyjemna, jest prawie niezbędna, jeśli Twoim celem jest szybkość przetwarzania.