Eu criei um script de shell que estou executando usando o nohup. Esse script executa vários scripts SQL em sequência, mas poucos em paralelo também. Eu tenho as seguintes declarações no meu script -
echo exit | sqlplus -s ${username}/${pwd}@${DB} @close1.sql
echo exit | sqlplus -s ${username}/${pwd}@${DB} @close2.sql
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing1.sql &
pid1=$!
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing2.sql &
pid2=$!
echo "Pricing Insert PIDs => ${pid1}, ${pid2}"
while [ 'ps -p ${pid1},${pid2} | wc -l' > 1 ]
do
sleep 5
done
echo exit | sqlplus -s ${username}/${pwd}@${DB} @insertPricing3.sql
A intenção é executar close1 - > close2 - > insertPricing1 & insertingPricing2 em paralelo - > insertPricing3. onde - > significa em seqüência.
Quando eu chequei o resultado no dia seguinte (depois de um tempo suficiente, ele deveria ter sido completado), vi que o shell script ainda estava rodando. Pricing1 e Pricing2 foram feitos, mas o Pricing3 não começou. Os processos para 1 e 2 terminaram.
ps -p 19105,19107
PID TTY TIME CMD
Existe algum problema no loop while quando executo isso em
# ps -p 19105,19107 | wc -l
1
mas isso -
# while [ 'ps -p 19105,19107 | wc -l' > 1 ]
> do
> echo "hello"
> done
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
hello
........ ctrl+C
então por que esse loop funciona quando 1 não é maior que 1? Qual deve ser a solução?