バックグラウンドで複数の Linux マシンでスクリプトを実行しようとしています。私のbashスクリプトは次のようになります:
for i in {1..1000}; do
for j in {1..20}; do
ssh -n -f remotehost$j "sh -c 'cd /blah/; nohup ./script.sh $i > /dev/null 2>&1 &'"
NPROC=$(($NPROC+1))
if [ "$NPROC" -ge 40 ]; then
echo "Waiting for work to finish"
wait
NPROC=0
fi
done
done
これは、サーバーの負荷を制限し、常に 20 のホストで 40 のプロセスしか実行できないようにするための私の試みです。ただし、これは機能せず、すべてのプロセスが同時に開始されます。リモート バックグラウンド プロセスが完了するのを待つ方法、または特定のリモート ホストで n 個を超えるプロセスが起動しないようにする方法を教えてください。