Shell: traiter 100 @ip en maintenant 10 en //

Fermé
mortelrdv - 26 juin 2012 à 22:41
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 - 27 juin 2012 à 10:53
Bonjour,

supposons que j'ai une liste de 47 @ip, je souhaiterai de faire un traitement identique sur chacun de ces @ip.

methode 1 : traiter l'un après l'autre les 47 @ip.
inconvenient : long
-----------------------------------------------------
methode 2 : traiter les 47 @ip en //. (je ne sais comment faire !!)
inconvenient : trop de site en meme temps
------------------------------------------------------
methode 3 : en traiter 10 et lorsque l'un d'entre eux est fini, on lance le traitement sur sur l'@ip suivant dans la liste des 47 @ip.
ce qui fait que :
10 traitement // reste 37
10 traitement // reste 36
....
10 traitement // reste 9
9 traitement // reste 8
...
3 traitement // reste 2
2 traitement // reste 1
1 traitement // reste 0


Je souhaiterai faire la "methode 3", est ce possible ? comment ?

Merci
PS: j'espère avoir été claire dans mon explication. Car c'est pas évident d'explique ça.







A voir également:

3 réponses

je me suis tromper sur l'exemple de la methode 3 :
10 traitement // reste 37
10 traitement // reste 36
....
10 traitement // reste 9
10 traitement // reste 8
...
10 traitement // reste 1
10 traitement // reste 0
...
9 traitement // reste 0
8 traitement // reste 0
...
2 traitement // reste 0
1 traitement // reste 0
fin de tous le traitement !
0
salut,

#!/bin/bash 

adressesIP=( 
   add1 
   add2 
   add3 
   add4 
   add5 
   add6 
   ...  
   add100 
) 

for addr in "${adressesIp[@]}" 
do mapfile -t procS < <(jobs -r)  
   while [ ${#procS[@]} -ge 10 ] 
   do sleep 2 
   done 
   ton_traitement "$addr" & 
done
je n'ai pas testé.
0
dubcek Messages postés 18744 Date d'inscription lundi 15 janvier 2007 Statut Contributeur Dernière intervention 4 septembre 2024 5 617
27 juin 2012 à 10:53
hello
essayer
#!/bin/bash
C=10
while read IP ; do
        (commandes $IP) &
        jobs=($(jobs -p))
        while (( ${#jobs[*]} >= $C )) ; do
                sleep 3 
                jobs=($(jobs -p))
        done
done < fichier 
0