複数の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
これを行う必要があります。