GNU/Linux >> Znalost Linux >  >> Linux

Paralelní spuštění skriptu shellu

V dokumentaci pro paralelní GNU je celý seznam programů, které mohou paralelně spouštět úlohy z shellu, včetně jejich srovnání. Existuje mnoho, mnoho řešení. Další dobrou zprávou je, že jsou pravděpodobně docela efektivní při plánování úloh, takže všechna jádra/procesory jsou neustále zaneprázdněna.


Chcete-li, aby věci běžely paralelně, použijte '&' na konci příkazu shell, který jej spustí na pozadí, a poté wait bude ve výchozím nastavení (tj. bez argumentů) čekat na dokončení všech procesů na pozadí. Takže možná odstartujte 10 paralelně, pak počkejte a pak udělejte dalších deset. Můžete to udělat snadno pomocí dvou vnořených smyček.


Další velmi praktický způsob, jak toho dosáhnout, je pomocí gnu parallel, které se vyplatí nainstalovat, pokud jej ještě nemáte; to je neocenitelné, pokud úkoly nemusí nutně trvat stejně dlouho.

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

spustí ./myrun 1 , ./myrun 2 atd. a ujistěte se, že běží 8 úloh najednou. Může také trvat seznamy uzlů, pokud chcete běžet na několika uzlech najednou, např. v úloze PBS; naše pokyny pro naše uživatele, jak to udělat v našem systému, jsou zde.

Aktualizováno o přidání: Chcete se ujistit, že používáte gnu-parallel, nikoli omezenější nástroj stejného jména, který je součástí balíčku moreutils (rozdílná historie obou je popsána zde.)


Podívejte se na subshell bash, lze je použít k paralelnímu spouštění částí skriptu.

Netestoval jsem to, ale tohle by mohl být začátek:

#!/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. Časový limit ve skriptu Shell?

  2. Na jakém Shellu běžím?

  3. Jak zajistit, aby skript Shell vždy běžel jako root?

  1. Jak spustit skript Shell na pozadí?

  2. Upravte skript shellu, když je spuštěn

  3. Jak spustit skript shellu při spuštění

  1. Příkaz Linux pro kontrolu, zda je spuštěn skript shellu nebo ne

  2. Vyzvat uživatele k přihlášení jako root při spuštění skriptu shellu

  3. Spusťte skript prostředí jako jiný uživatel