Привет всем
Я пытаюсь понять, в полной мере вопрос, я вчера и был просто надеясь, что нужно дать мне ваше мнение о нем. Я полагаю, что я установил проблемы, но я все еще чувствую неведении о некоторых частях поведение я мог опыт в следующих сценариев. Вот была ситуация (старый код упрощенная версия):
Код:
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
Содержание этого INPUT_DIR содержится много файлов, и она сообщила об выше ошибку на одной из них (SOURCE \u003d 1, END_RCD \u003d 0). Однако дело было ОК, насколько я мог видеть. Я быстро обеспечили моей команды были правильными, и даже вновь запускали скрипт на весь список файлов, чтобы получить окончательное ОК как производства, так что это посмотрел странно на первый взгляд.
Через некоторое время я, наконец, расследование установило, что у меня была куча N процессов работает в фоновом режиме, что призыв кода. Несмотря на это я первоначально предполагалось этого сценария будет выполняться только один раз в то же время, так что файлы, обработанные с моего процесса (N), входящих в INPUT_DIR будет обновление ОБРАБОТАННЫЕ файла, чтобы они не взяли на следующий призыв.
К сожалению, для моей теории, истина заключается в том, что сценарий получил призвали несколько раз в то же время (из разных сессий), в параллельной обработке, это с ОБРАБОТАННЫЕ файл, который был не только (вы начинаете видеть то, что она может выглядеть здесь ). Так кратко, вышеуказанные сценария сообщили об ошибке, при запуске на процессе (N) для файлов, созданных в процессе (N-1).
Теперь выше положение должно быть нормально, если файл открыт один раз в момент, то это просто, что этот файл получает проверяются неправильный процесс, но результат остается тем же. Так что я считаю, заключается в том, что файл, на котором он сообщил об ошибке была открыта в двух сессий одновременно.
Я удалил файл ОБРАБОТАННЫЕ и сейчас запустить этот скрипт один раз после того, как все процессы завершены и поэтому я не получают какого-либо вопроса больше. Единственное, что я до сих пор не понимаю, почему это END_RCD дал 0. После двух сессий имеют различные переменные буферы, я не вижу, как потенциального столкновения на файл будет производить такую ошибку. Если кто-нибудь здесь есть доверие

объяснение, я был бы очень рад узнать о нем.
Большое спасибо,
Yann