프로세스를 서버로 보내고 있지만 한 번에 특정 수의 프로세스만 실행하고 싶습니다. 그래서 실행 중인 작업 수를 반복해서 확인하고 현재 작업 수가 특정 수준을 초과하지 않는 경우에만 새 작업을 제출합니다. 이렇게 하려면 더 많은 작업을 제출하기 위해 현재 대기열이 가득 찰 때까지 기다려야 합니다.
나는 이것을 달성하는 방법을 알고 싶습니다.
#!/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
.