Inotifywait не выполняется после одного выполнения

У меня есть сценарий оболочки, в котором я использую «inotifywait» для мониторинга трех каталогов. Как только файл попадает в каталог «dirToProcess», выполняется некоторая обработка, а затем файлы перемещаются в каталог «successDir» или «failedDir».

Теперь, как только какие-либо файлы будут перемещены или скопированы в любой из каталогов, я хочу, чтобы inotifywait выполнялся.

Вот код, который я выполняю:

inotifywait $dirToProcess $successDir $failedDir -e create -e moved_to --   
   exclude "\.(swx|swp|end|en1)" |
 while read path action file; do
    if [ -f $dirToProcess/$file ]; then
            doSomething;
    elif [ -f $successDir/$file ]; then
            cleanDir $successDir        # function which has some specific logic
            exit 0;
    elif [ -f $failedDir/$file ]; then
            cleanDir $failedDir         # function which has some specific logic
            exit 0;
    else
            c4lx_log "File $file not in poll, archive or failed, then why did we get notified?"
            exit 0;
    fi

Вот проблема: как только файлы приходят в 'dirToProcess', inotifywait замечает это и вызывается. Но после обработки, когда файлы перемещаются в "$successDir" или "$failedDir" (с помощью того же кода, который обрабатывал файлы в "dirToProcess", inotifywait не выполняется. Но если я перемещаю файлы вручную в любой из этих двух каталогов, все кажется чтобы нормально работал.

Может ли кто-нибудь дать мне какой-нибудь указатель здесь или объяснить, если мне не хватает каких-либо деталей здесь.

(я пытался использовать опцию -m или -r с inotifywait, но, похоже, не работает)

Спасибо


person user1188611    schedule 25.01.2016    source источник


Ответы (1)


Вам нужно указать флаг -m для inotifywait, чтобы продолжить выполнение после первого события.

person chepner    schedule 25.01.2016
comment
как я уже сказал, я сделал, но даже с -m он иногда работает, а иногда нет. - person user1188611; 25.01.2016
comment
Вам нужно быть более конкретным. Без -m абсолютно не получится. С -m у вас может быть другая проблема для диагностики. - person chepner; 26.01.2016
comment
весь код вызывает какую-то другую функцию, которая обрабатывает файлы в каталоге dirToProcess и перемещает файл либо в «successDir», либо в «failedDir». Я не уверен, как это может быть проблемой - person user1188611; 26.01.2016
comment
имеет ли значение порядок использования -m? - person user1188611; 26.01.2016