6

我有一个脚本可以监视目录(递归)并在文件更改时执行命令。当监视标志如下使用时,这可以正常工作:

#!/bin/sh

inotifywait -m -r /path/to/directory |
    while read path action file; do
            if [ <perform a check> ]
            then
                my_command
            fi
    done

但是,我想在启动时和后台运行它,所以天真地认为我可以将 -m 标志更改为 -d (运行 inotifywait 作为守护进程,并包含 --outfile 位置),然后将其添加到 rc.local 到在启动时运行。我哪里错了?

4

3 回答 3

4

好吧....使用-d它会自行设置背景并输出到 outfile,因此您的整个管道和循环构造没有实际意义,并且它永远不会看到任何数据。

于 2018-01-16T00:38:11.807 回答
2

Incron是一个类似 cron 的用于 inotify 事件的守护进程。

只需为您的任务使用incrontab和一个条目:

/path/to/directory IN_ALL_EVENTS /usr/local/bin/my-script $@ $# $%

/local/bin/my-script将是:

#! /bin/bash
local path=$1
local action=$2
local file=$3
if [ <perform a check> ]
then
  my_command 
fi
于 2018-01-16T00:33:40.590 回答
2

&您需要在您的命令末尾添加一个/etc/rc.local

&在命令末尾放一个单意味着在后台运行此程序,以便用户仍然可以输入。

于 2018-01-16T11:44:24.127 回答