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

mortelrdv -  
dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   -
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.

3 réponses

  1. mortelrdv
     
    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
  2. Utilisateur anonyme
     
    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
  3. dubcek Messages postés 18627 Date d'inscription   Statut Contributeur Dernière intervention   5 660
     
    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