Existe uma maneira simples de limitar o número de processos filhos que são executados em paralelo?

1

Eu tenho um script bash que inicia vários processos de rsync em paralelo. Gostaria de limitar o número de processos filhos simultâneos, mas não serializar todo o script.

Aqui está uma versão simplificada do script atual:

#!/bin/bash
(
  flock -n 200 || exit 0
  {
    for f in $(ssh $1 ls /var/images/)
    do
      rsync … &
    done
    wait
  } &> /var/log/my.log
) 200>/var/lock/my.lockfile

Acredito que xargs com --max-procs possa ser uma solução , mas não consigo descobrir como integrar isso com meu script. Pode ser feito assim, ou existe uma maneira melhor?

    
por Jack Douglas 30.09.2013 / 09:52

1 resposta

3
ssh "$1" "find /var/images -type f -print0" |
  xargs --null --replace --max-procs=X rsync "${1}:{}" /my/destination

Deve fazer o truque.

    
por 30.09.2013 / 11:28