Quebrando de um loop, retorne ao início do loop com o valor correto da variável

1

Estou enviando processos para um servidor, mas só quero um determinado número em execução por vez. Assim, faço um loop que verifica quantos trabalhos estão sendo executados e apenas envia um novo se a quantidade atual de trabalhos não exceder alguma medida. Para isso, preciso esperar se a fila atual estiver cheia, para enviar mais trabalhos.

Eu estou querendo saber como conseguir isso por meio de algo como:

#!/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

Se minha intuição estiver correta, o loop acima tentará da próxima vez com $(($i + 1)) se o servidor estiver cheio na etapa $i - deixando alguns trabalhos não processados.

Alguma sugestão de como isso pode ser tratado? Ou seja como posso sair da segunda cláusula ( else ) e retornar ao início do loop.

    
por Astrid 22.01.2016 / 17:10

1 resposta

3

Uma solução simples é alterar um pouco a sua lógica:

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

Dessa forma, $i só será incrementado quando um trabalho for enviado. Se o servidor estiver cheio, o script aguardará 10 minutos e será repetido com o mesmo valor de $i .

    
por 22.01.2016 / 17:15