Como executar um script 20 de cada vez com diferentes variáveis de cada vez em paralelo?

0

Eu estou tentando executar 20 files por vez, usando warc.sh ou uma maneira melhor de colocar 20 instâncias de warc.sh por vez com o conteúdo do diretório como entrada. Também estou tentando observar os PIDs no caso de coisas ruins acontecerem e carregar uma nova instância com uma nova entrada sempre que uma instância antiga terminar.

# test if files exists and run
if [ "$(ls -A ${base_dir}/schedule)" ]; then

    # function to be backgrounded
    track()
    {
      ./warc "${base_dir}/schedule/$1 printf" "\nFinished: %d\n" "$1"
    }

    start=$(date '+%s')

    # Make an associative array in which you'll record pids.
    declare -A pids

    # Background an instance of the track() function for each number, record the pid.
    for n in 'ls -A ${base_dir}/schedule'; do
        if [ ${#pids[@]} > 20 ]; then
          track $n &
          pid=$!
          echo "Backgrounded: $n (pid=$pid)"
          pids[$pid]=$n
        else
            echo 'Sleeping' ; sleep 2
        fi
    done

    # Watch your stable of backgrounded processes.
    # If a pid goes away, remove it from the array.
    while [ -n "${pids[*]}" ]; do
      sleep 1
      for pid in "${!pids[@]}"; do
        if ! ps "$pid" >/dev/null; then
          unset pids[$pid]
          echo "unset: $pid"
        fi
      done
      if [ -z "${!pids[*]}" ]; then
        break
      fi
      printf "\rStill waiting for: %s ... " "${pids[*]}"
    done

    printf "\r%-25s \n" "Done."
fi

Neste momento, isso está completamente fora de controle e criando mais de 900 processos em segundo plano = /

    
por ehime 25.10.2013 / 20:22

1 resposta

0

Escreva Makefile para ele e execute make -j 20 .
Você pode escrever Makefile com script de shell

    
por 26.10.2013 / 12:18