terça-feira, 25 de junho de 2013

Executar Processos em Paralelo com termino Sincrono

Situação 1
Para executar vários processos em paralelo e ao final de todos executar um processo final, pode-se utilizar a instrução bash wait

Sintaxe
wait

Exemplo:
#!/bin/sh
./pgm1 &
echo "Pgm1 em execucao"
./pgm2 &
echo "Pgm2 em execucao"
wait
echo "Termino de ambos os processos"



Situação 2
Executar em paralelo vários processos, com base em um diretório de entrada e ao final de todos os processos, executar um novo processo. Para esta situação, pode-se recorrer a utilização de um pequeno script awk, além de um artifício de criar um arquivo ao final de todos os processos com a instrução bash wait.

Exemplo de script:

#!/bin/sh
DIR_ENTRADA=${1}
rm -fr "processo.ok"
ARQ_LOG_PROGRAMA="${PWD}/script.log"
DATA_EXEC=$(date "+%x-%X")
echo " " > ${ARQ_LOG_PROGRAMA}
echo "1) ${DATA_EXEC} -> Inicio da execucao" >> ${ARQ_LOG_PROGRAMA}

ls ${DIR_ENTRADA} | awk -v e=${DIR_ENTRADA} -v l=${ARQ_LOG_PROGRAMA} '{print ".programa " e "/" $0 ".txt >> " l " & "} END { print "wait;echo ok > processo.ok"}' | bash

while [ ! -f "processo.ok" ]; do
echo "Processando..." >> ${ARQ_LOG_PROGRAMA}
sleep 10
done

DATA_EXEC=$(date "+%x-%X")
echo "2) ${DATA_EXEC} -> Processamento em paralelo encerrado. Início do processo consolidador." >> ${ARQ_LOG_PROGRAMA}
./consolidador.sh

DATA_EXEC=$(date "+%x-%X")
echo "3) ${DATA_EXEC} -> Termino do Processamento" >> ${ARQ_LOG_PROGRAMA}

Agradecimentos a: Jorge Amorim e Leonardo Rombesso !

Nenhum comentário:

Postar um comentário