使用inotify-tools作为守护进程处理数据

Val*_*adu 2 linux bash shell inotify-tools

我有一个bash脚本,它使用inotify-tools处理一些数据,以了解文件系统上何时发生了某些事件.如果在bash控制台中运行它可以正常工作,但是当我尝试将其作为守护程序运行时它会失败.我认为原因是inotifywait命令调用的所有输出都转到了一个文件,因此,之后的部分| while不再被调用.我该如何解决这个问题?这是我的剧本.

#!/bin/bash

inotifywait -d -r \
-o /dev/null \
-e close_write \
--exclude "^[\.+]|cgi-bin|recycle_bin" \
--format "%w:%&e:%f" \
$1|
while IFS=':' read directory event file
do

    #doing my thing

done
Run Code Online (Sandbox Code Playgroud)

因此,-d告诉inotifywait要作为守护进程运行,-r以递归方式执行,并且-o是保存输出的文件.在我的情况下,文件是/dev/null因为我不需要输出,除了在命令(| while...)后处理部分

lar*_*sks 9

inotify-wait在这种情况下,您不希望作为守护程序运行,因为您希望从命令继续处理输出.您想要用-d命令行选项替换-m,它告诉inotifywait您继续监视文件并继续打印到stdout:

   -m, --monitor
          Instead  of exiting after receiving a single event, execute
          indefinitely.  The default behaviour is to exit  after  the
          first event occurs.
Run Code Online (Sandbox Code Playgroud)

如果您希望在后台运行某些内容,则需要对整个脚本进行后台处理.