diff --git a/local/bin/updateall.sh b/local/bin/updateall.sh index 343ae7d..4a9c180 100755 --- a/local/bin/updateall.sh +++ b/local/bin/updateall.sh @@ -168,12 +168,18 @@ echo "Clé d'installation : $uniqkey" machines=($(get_ssh_aliases)) -echo -e "\n--- Démarrage du traitement ---\n" +MAX_PARALLEL_JOBS=4 # Par exemple, 4 connexions simultanées -# Parcourir la liste des machines +limit_jobs() { + while [ "$(jobs -rp | wc -l)" -ge "$MAX_PARALLEL_JOBS" ]; do + sleep 1 + done +} + +# Fonction englobante pour le traitement d'une machine +process_machine() { + local machine="$1" -for machine in "${machines[@]}"; do - # Vérification si le nom de machine est présent dans le fichier .config/updateall-hosts echo -e "\n" echo -n " >> $machine " @@ -181,14 +187,9 @@ for machine in "${machines[@]}"; do status=$(grep "^$machine " ~/.config/updateall-hosts | awk '{print $2}') if [ "$status" = "1" ]; then echo -e "${GREEN}connue${NC}" - - check_host "$machine" - machine_online="$?" - - if [ "$machine_online" -eq 1 ]; then - check_keyinstall "$machine" "$uniqkey" - keyinstall_present="$?" - if [ "$keyinstall_present" -eq 0 ]; then + + if check_host "$machine"; then + if check_keyinstall "$machine" "$uniqkey"; then update_machine "$machine" create_installkey "$machine" "$uniqkey" ok_machines+=("$machine") @@ -201,10 +202,7 @@ for machine in "${machines[@]}"; do ignored_machines+=("$machine") fi else - check_host "$machine" - machine_online="$?" - - if [ "$machine_online" -eq 1 ]; then + if check_host "$machine"; then echo -e "${RED}vue pour la 1re fois${NC}" confirm_update "$machine" update_machine "$machine" @@ -216,10 +214,23 @@ for machine in "${machines[@]}"; do error_machines+=("$machine") fi fi +} + + +echo -e "\n--- Démarrage du traitement ---\n" + +# Parcourir la liste des machines + +for machine in "${machines[@]}"; do + limit_jobs + process_machine "$machine" & done +wait # Attend que tous les jobs soient terminés + + echo -e "\n--- Résumé des machines ---\n" # Afficher les machines ignorées