inotify 目录文件变更实时监控


# inotify 软件
# 安装:通过epel,安装在客户端
# 功能:实时监控目录下文件的更变
# 监控事件:创建、删除、修改、移动...
# 安装位置:客户端
# 安装命令:
sudo apt-get install inotify-tools
# 源码安装:
wget --no-check-certificate http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar xzvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14
./configure --prefix=/usr
make
make install
# 安装后的应用程序:inotifywait、inotifywatch

# inotifywait
# 选项:
#    -r:递归,对目录中的子目录也进行监控
#    -q:仅仅打印少量信息(仅仅打印监控的事件)
#    -m:一直处于监控状态
#    -d:和-m一样,区别是-d是后台运行
#    -o file:将监控到的事件输出到一个文件中(默认输出到终端) 
#    -s:将错苏信息输出到系统日志中(默认输出到终端)
#    --excludei:忽略文件名的大小写
#    -e :监控指定的事件
#        access:访问事件
#        modify:编辑事件
#        attrib:修改文件属性事件(修改文件元数据)
#        close_write:当文件从写模式下关闭的时候,会触发该事件
#        close_nowrite:当文件从读模式下关闭的时候,会触发该事件
#        close:无论以什么方式打开的文件,在关闭的时候都会触发该事件
#        open:当文件被打开时,都会触发该事件
#        moved_to:当一个文件移动到被监控的目录下,就会触发该事件
#        moved_from:当一个文件从被监控目录下移走的时候,就会触发该事件
#        moved_sekf:在监控目录下执行移操作,就会触发该事件
#        create:创建文件的时候触发
#        delete:删除文件的时候触发
        
#    --timefmt :指定时间显示的格式(和date格式一样)
#    --format 
#        %f:输出发生事件的名称
#        %w:输出繁盛事件的文件所在目录的绝对路劲
#        %e:输出发生时间的名称(多个事件以空格隔开)
#        %Xe:和%e唯一区别是多个事件以X隔开
#        %T:输出发生事件的时间(时间格式由--timefmt指定)

# 例子:
inotifywait -mrq --timefmt "%F%T" --format "%T %w %f" -e create,delete,modify /test

# 实时同步脚本
#!/bin/bash
#
prog="inotifywait"
events="create,delete,modify,attrib"
iopt="-mrq"

lpath="/test/"

rhost="10.0.0.41"
vuser="vuser1"
secfile="/etc/rsync.passwd"
ropt="-az --delete"
modename="web1"

$prog $iopt --format "%T %w %f" -e $events $lpath | while read line
do
    rsync $lpath $line $vuser@$rhost::$modename --password-file=$modename
done


# sersync+rsync实时同步
# sersync其实就是对inotify进行了一个包装,将配置信息以xml的方式进行配置,并进行了中文翻译
# sersync会比自己配置方便一点。还可以设置多线程模式。
# 安装示例:https://www.cnblogs.com/mouseleo/p/12587126.html