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