web-dev-qa-db-ja.com

並行して実行される子プロセスの数を制限する簡単な方法はありますか?

複数の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
user12810
ssh "$1" "find /var/images -type f -print0" |
  xargs --null --replace --max-procs=X rsync "${1}:{}" /my/destination

トリックを行う必要があります。

2
Spack