Hola a todos
Estoy tratando de entender un problema que tuve ayer y estaba esperando que usted me da su opinión al respecto. Creo que solucionado el problema, pero sigo sintiéndome ignorante acerca de algunas partes de la conducta que podría experimentar en la situación siguiente. Aquí es la situación (antiguo código simplificado versión):
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
El contenido de la INPUT_DIR figuran una gran cantidad de archivos, y se informó de lo anterior error en uno de ellos (FUENTE \u003d 1, END_RCD \u003d 0). Sin embargo, el archivo estaba bien por lo que pude ver. Rápidamente me garantiza mi comandos son correctas e incluso re-ejecutó el script en la lista de archivos de todo para conseguir un final bien como una salida, por lo que esta parecía extraño a primera vista.
Después de algún tiempo de investigación que finalmente descubrió que tenía un montón de n procesos que se ejecutan en segundo plano que piden poco de código. A pesar de que originalmente este supuesto este script sólo se ejecuta una vez al mismo tiempo, por lo que procesa los archivos de mi proceso (n) caer en INPUT_DIR sería la actualización del archivo processed para que no se recogió por las próximas convocatorias.
Desafortunadamente para mi teoría, la verdad es que el script se llama varias veces al mismo tiempo (a partir de diferentes períodos de sesiones), el procesamiento en paralelo, esto con un archivo que processed no es exclusiva (que comenzará a ver lo que puede parecer aquí ). Por lo tanto, para resumir, el script de arriba informó de un error cuando se ejecuta en el proceso (n) para un archivo creado por el proceso (n-1).
Ahora la situación debe ser bien siempre y cuando un archivo se abre una vez a la vez, es sólo que este fichero es marcada por el mal proceso, pero el resultado sigue siendo el mismo. Así que lo que yo creo es que el archivo sobre el que informó de que el error se abrió en dos sesiones al mismo tiempo.
He eliminado el archivo y ahora processed ejecutar este script una vez se completen todos los procesos, así que no hay cuestión más. La única cosa que yo aún no entiendo es por qué END_RCD dio 0. Dado que dos períodos de sesiones tienen diferentes topes variable, no veo cómo un posible choque de un archivo produciría un error de este tipo. Si alguien aquí tiene una credibilidad

explicación, me encantaría saberlo.
Muchas gracias,
Yann