GNU/Linux >> Linux Esercitazione >  >> Linux

Esecuzione di script di shell in parallelo

C'è un intero elenco di programmi che possono eseguire lavori in parallelo da una shell, che include anche confronti tra loro, nella documentazione per GNU parallel. Ci sono molte, molte soluzioni là fuori. Un'altra buona notizia è che probabilmente sono abbastanza efficienti nella pianificazione dei lavori in modo che tutti i core/processori siano sempre occupati.


Per far funzionare le cose in parallelo, usa "&" alla fine di un comando di shell per eseguirlo in background, quindi wait per impostazione predefinita (cioè senza argomenti) attenderà fino al termine di tutti i processi in background. Quindi, forse inizia 10 in parallelo, poi aspetta, poi fai altri dieci. Puoi farlo facilmente con due cicli nidificati.


Un altro modo molto utile per farlo è con gnu parallel, che vale la pena installare se non lo si possiede già; questo è prezioso se le attività non richiedono necessariamente la stessa quantità di tempo.

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

avvierà ./myrun 1 , ./myrun 2 , ecc., assicurandosi che siano in esecuzione 8 processi alla volta. Può anche richiedere elenchi di nodi se si desidera eseguire su più nodi contemporaneamente, ad esempio in un lavoro PBS; le nostre istruzioni per i nostri utenti su come farlo sul nostro sistema sono qui.

Aggiornato per aggiungere: Vuoi assicurarti di utilizzare gnu-parallel, non l'utilità più limitata con lo stesso nome inclusa nel pacchetto moreutils (la storia divergente dei due è descritta qui.)


Dai un'occhiata alle subshell bash, queste possono essere usate per eseguire parti di uno script in parallelo.

Non l'ho testato, ma potrebbe essere un inizio:

#!/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. Come eseguire uno script di shell in background?

  2. Come si esegue uno script all'accesso in *nix?

  3. Come eseguire uno script di shell all'avvio

  4. Comando Linux per verificare se uno script di shell è in esecuzione o meno

  5. Richiedi all'utente di accedere come root durante l'esecuzione di uno script di shell

Come eseguire il comando / script della shell di Linux in background

Come creare ed eseguire uno script di shell in Debian 10

Come creare ed eseguire uno script di shell in CentOS 8

Come eseguire lo script della shell come servizio SystemD in Linux

Come eseguire uno script Bash

Come creare ed eseguire uno script di shell in Ubuntu 22.04