プロセスをサーバーに送信していますが、一度に特定の数のプロセスしか実行したいと思います。そのため、実行中のジョブ数を繰り返し確認し、現在のジョブ数が特定のレベルを超えない場合にのみ新しいジョブを送信します。これを行うには、より多くのジョブを送信するために現在のキューがいっぱいになるまで待つ必要があります。
私はこれを達成する方法を知りたいです。
#!/bin/bash
for i in `seq 10`; do
if [ condition1 -le condition2 ]; do
#>>> Submit jobs
else
# SERVER IS FULL
#
# Wait 10min and try again, by returning to start of the loop
# with the current value of $i intact
sleep 10m
done
私の直観が正しい場合、上記のループは、次に$(($i + 1))
サーバーがいっぱいになると、$i
一部のタスクが未処理のままになります。
この問題を解決する方法に関する提案はありますか?つまり、どのようにして2番目の句()から外れ、else
ループの先頭に戻ることができますか?
答え1
簡単な解決策は、ロジックを少し変更することです。
i=1;
while [ "$i" -le 10 ]; do
if [ condition1 -le condition2 ]; do
#>>> Submit jobs
## Increment the value of $i if a job was submitted
i=$((i+1))
else
# SERVER IS FULL
#
# Wait 10min and try again, by returning to start of the loop
# with the current value of $i intact
sleep 10m
done
これにより、$i
ジョブが送信されたときにのみ増加します。サーバーがいっぱいになると、スクリプトは10分間待ってから同じ値で繰り返します$i
。