병렬로 실행되는 하위 프로세스 수를 제한하는 쉬운 방법이 있습니까?

병렬로 실행되는 하위 프로세스 수를 제한하는 쉬운 방법이 있습니까?

여러 rsync 프로세스를 병렬로 시작하는 bash 스크립트가 있습니다. 동시 하위 프로세스 수를 제한하고 싶지만 전체 스크립트를 직렬화하고 싶지는 않습니다.

다음은 현재 스크립트의 단순화된 버전입니다.

#!/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

나는 xargs믿는다--max-procs 해결책이 될 수 있습니다하지만 내 스크립트와 통합하는 방법을 모르겠습니다. 이것이 가능합니까, 아니면 더 좋은 방법이 있습니까?

답변1

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

이 작업을 수행해야 합니다.

관련 정보