Oi todos
Estou tentando entender completamente um problema que tive ontem e estava apenas esperando que você me dê a sua opinião sobre isso. Penso que fixa o problema, mas eu ainda sinto ignorantes acerca de algumas partes do comportamento eu pudesse experiência no seguinte cenário. Aqui era a situação (antigo código simplificado versão):
Código:
for FILE in $INPUT_DIR ; do
grep -q $FILE $PROCESSED 2>&1
if [ $? != 0 ] ; then
echo $FILE >> $PROCESSED
else
continue
fi
SOURCE=`grep ^S $FILE | wc -l | awk '{print $1}'`
END_RCD=`grep ^E $FILE | wc -l | awk '{print $1}'`
if [ $SOURCE -ne $END_RCD ] ; then
echo "Error in $FILE: "$SOURCE" source keys detected, but "$END_RCD" end keys detected.
fi
done
O conteúdo da INPUT_DIR continham uma grande quantidade de arquivos, e ele relatou o erro acima, em um deles (FONTE \u003d 1, END_RCD \u003d 0). No entanto, o arquivo foi ok, tanto quanto eu podia ver. Eu rapidamente assegurada minha comandos eram correctas e mesmo re-correu o script em todo o arquivo para obter uma lista final ok como uma saída, pelo que esta parecia estranho à primeira vista.
Depois de algum tempo de investigação que finalmente descobriu que eu tinha um monte de n processos em execução em segundo plano chamadora que trecho de código. Apesar de isso eu inicialmente suposto este script só seria correr uma vez ao mesmo tempo, de modo que os arquivos transformados a partir do meu processo (n) a cair em INPUT_DIR seria PROCESSED actualização do ficheiro para que não se apanhada pelas próximas chamadas.
Infelizmente, a minha teoria, a verdade é que o script tem chamado várias vezes ao mesmo tempo (a partir de diferentes sessões), o processamento em paralelo, isto com um ficheiro que não foi PROCESSED única (você começará a ver o que se pode olhar como aqui ). Portanto, para resumir, o script acima relatado um erro quando em execução no processo (n) para um arquivo criado pelo processo (n-1).
Agora, a situação acima descrita deve ser ainda ok, enquanto um arquivo é aberto, uma vez por hora, é só que este arquivo fica marcada pelo processo de errado, mas o resultado permanece o mesmo. Então, o que penso é que o dossier sobre o qual relatou que o erro foi inaugurado em duas sessões, ao mesmo tempo.
Eu tenha removido o arquivo PROCESSED e agora executar este script uma vez depois de todos os processos estejam concluídos, pelo que não receber qualquer problema mais. A única coisa que eu ainda não entendo é por que END_RCD deu 0. Uma vez que duas sessões têm diferentes variáveis tampões, não vejo como um potencial confronto num ficheiro iria produzir um erro deste tipo. Se alguém aqui tem uma credibilidade

explicação, eu ficaria muito feliz de saber sobre isso.
Muito obrigado,
Yann