2016-01-25 135 views
1

我有一個shell腳本,在其中我使用'inotifywait'來監視三個目錄。只要文件進入目錄'dirToProcess',一些處理完成,然後文件被移動到'successDir'或'failedDir'目錄。一次執行後Inotifywait沒有執行

現在只要任何文件被移動或複製到任何需要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但似乎並不奏效)

感謝

回答

0

你需要指定爲的-m標誌在第一個事件後繼續執行。

+0

正如我所說我做的,但即使與-m它似乎有時在某個時間,有時不工作。 – user1188611

+0

你需要更具體。沒有'-m'就絕對不行。用'-m',你可能有其他一些問題需要診斷。 – chepner

+0

所有代碼都調用一些其他函數來處理目錄dirToProcess中的文件,並將文件移動到'successDir'或'failedDir'。我不知道如何可以成爲一個問題 – user1188611