UNIX: Enviar job somente após a conclusão do job anterior?

0

Eu gostaria de enviar o mesmo trabalho .sas iterando sobre um argumento, mas gostaria que o trabalho só fosse enviado depois que o anterior fosse concluído. Aqui está minha tentativa:

    #!/bin/ksh

    export weeks="1 2 3"
    for week in $weeks
    do

    sas -log job$week.log job.sas > /dev/null & pid_ind=$!
    wait $pid_ind

    echo "job complete for week $week"
    done

Isso resulta em todos os trabalhos sendo enviados quase imediatamente, e então eles ficam na fila. Alguém pode elaborar o comando 'wait'? Estou tentando suspender a submissão até que o trabalho anterior do SAS seja concluído , não enviado.

    
por mlegge 23.06.2014 / 03:40

2 respostas

4

Você tem um erro, pois o loop terminou com done palavra-chave, não fi .

for variable in lists
do
    # do something here
done
    
por 23.06.2014 / 03:44
0

Remova o comando "wait", não há uso para ele. Além disso, remova o "& pid_ind = $!" Esse código coloca o trabalho em um processo em segundo plano que causa o problema que você está enfrentando.

Fora dos processos daemon (e processos iniciados em segundo plano), os comandos dentro de um script são síncronos. Cada comando espera que o último termine.

#!/bin/ksh

weeks="3 4 5"
echo "Waiting for first job to complete..."
for week in $weeks; do
    sas -log job$week.log job.sas > /dev/null
    echo "job complete for week $week"
done
    
por 23.06.2014 / 15:38