GNU/Linux >> Tutoriels Linux >  >> Linux

Exécuter un script shell en parallèle

Il existe toute une liste de programmes qui peuvent exécuter des tâches en parallèle à partir d'un shell, qui inclut même des comparaisons entre eux, dans la documentation de GNU parallel. Il existe de très nombreuses solutions. Une autre bonne nouvelle est qu'ils sont probablement assez efficaces pour planifier les tâches afin que tous les cœurs/processeurs soient occupés à tout moment.


Pour que les choses fonctionnent en parallèle, vous utilisez '&' à la fin d'une commande shell pour l'exécuter en arrière-plan, puis wait attendra par défaut (c'est-à-dire sans arguments) que tous les processus d'arrière-plan soient terminés. Alors, lancez peut-être 10 en parallèle, puis attendez, puis faites-en dix autres. Vous pouvez le faire facilement avec deux boucles imbriquées.


Une autre façon très pratique de le faire est d'utiliser gnu parallel, qui vaut la peine d'être installé si vous ne l'avez pas déjà; c'est inestimable si les tâches ne prennent pas nécessairement le même temps.

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

lancera ./myrun 1 , ./myrun 2 , etc., en s'assurant que 8 tâches sont en cours d'exécution à la fois. Il peut également prendre des listes de nœuds si vous souhaitez exécuter sur plusieurs nœuds à la fois, par exemple dans un travail PBS; nos instructions à nos utilisateurs pour savoir comment faire cela sur notre système sont ici.

Mise à jour pour ajouter : Vous voulez vous assurer que vous utilisez gnu-parallel, et non l'utilitaire plus limité du même nom fourni dans le paquet moreutils (l'historique divergent des deux est décrit ici.)


Découvrez les sous-shells bash, ceux-ci peuvent être utilisés pour exécuter des parties d'un script en parallèle.

Je n'ai pas testé cela, mais cela pourrait être un début :

#!/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. Expiration du délai dans un script shell ?

  2. Sur quel shell suis-je en cours d'exécution ?

  3. D'où est exécuté un script Shell ?

  4. Comment exécuter un script shell en arrière-plan ?

  5. Commande Linux pour vérifier si un script shell est en cours d'exécution ou non

Comment exécuter une commande / un script Linux Shell en arrière-plan

Comment créer et exécuter un script shell dans Debian 10

Comment créer et exécuter un script Shell dans CentOS 8

Comment exécuter un script Shell en tant que service SystemD sous Linux

Comment exécuter un script bash

Comment créer et exécuter un script shell dans Ubuntu 22.04