Você precisa fornecer identificadores de processo (PIDs) para wait
. Também a partir da sua descrição, não parece que o seu comando esteja bloqueando, o que, em última análise, dificultaria a coleta dos PIDs pelos quais você deseja aguardar. Por exemplo. se o processo for forking e permitir que o script continue sem conhecer o novo PID dos processos bifurcados.
Mas, caso a linha nohup sh -c ...
esteja bloqueando, você deseja enviá-la para o plano de fundo com &
, salvar o PID dos processos em segundo plano e finalmente aguardar todos os PIDs salvos (por exemplo, em $WAIT_FOR_PIDS
). Variável $!
fornece o PID do último processo enviado para execução em segundo plano.
WAIT_FOR_PIDS="";
echo "$wk" | while read -r a b;
do
counter=$(($counter+1))
nohup sh -c 'impala-shell -d nielsen -f query.sql --var=dt=$a --var=incre=$b;
echo $a,$?>>$week_status_file;
if [ $? -ne 0 ]; then
echo $a,$b>>$err_week_file
fi' & WAIT_FOR_PIDS="$WAIT_FOR_PIDS $!"
if [ $(($counter%5)) == 0 -a $counter -ge 5 ];
then
echo "Check"
wait $WAIT_FOR_PIDS
WAIT_FOR_PIDS=""
fi
done
Além disso, você deve pensar nas condições de corrida enquanto ecoa em paralelo em $week_status_file
. Veja man flock
para facilitar o bloqueio de arquivos acessíveis por shell.