루프를 중단하고 올바른 변수 값을 사용하여 루프의 시작 부분으로 돌아갑니다.

루프를 중단하고 올바른 변수 값을 사용하여 루프의 시작 부분으로 돌아갑니다.

프로세스를 서버로 보내고 있지만 한 번에 특정 수의 프로세스만 실행하고 싶습니다. 그래서 실행 중인 작업 수를 반복해서 확인하고 현재 작업 수가 특정 수준을 초과하지 않는 경우에만 새 작업을 제출합니다. 이렇게 하려면 더 많은 작업을 제출하기 위해 현재 대기열이 가득 찰 때까지 기다려야 합니다.

나는 이것을 달성하는 방법을 알고 싶습니다.

#!/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일부 작업이 처리되지 않은 상태로 남아 있도록 시도합니다.

이 문제를 해결하는 방법에 대한 제안 사항이 있습니까? 즉, 어떻게 두 번째 절( )에서 벗어나 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.

관련 정보