【问题标题】:Inotifywait not getting executed after one executionInotifywait 在一次执行后没有被执行
【发布时间】:2016-05-02 06:55:55
【问题描述】:

我有一个 shell 脚本,我在其中使用“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不会被执行。但是如果我在这两个目录中的任何一个中手动移动文件,一切似乎工作正常。

有人可以在这里给我一些指示或解释我是否在这里遗漏了任何细节。

(我尝试在 inotifywait 中使用 -m 或 -r 选项,但似乎不起作用)

谢谢

【问题讨论】:

    标签: linux shell inotify


    【解决方案1】:

    您需要为inotifywait 指定-m 标志才能在第一个事件之后继续执行。

    【讨论】:

    • 正如我所说的那样,但即使使用 -m,它似乎有时也能正常工作,有时不能。
    • 您需要更加具体。没有-m,它绝对行不通。使用-m,您可能还有其他问题需要诊断。
    • 所有代码都是调用一些其他函数来处理目录 dirToProcess 中的文件并将文件移动到“successDir”或“failedDir”。我不确定这怎么会是个问题
    • 使用 -m 的顺序是否重要?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多