1、查看服务器内核是否支持inotify
ll /proc/sys/fs/inotify #列出文件目录,出现下面的内容,说明服务器内核支持inotify
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_queued_events
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_instances
-rw-r--r-- 1 root root 0 Mar 7 02:17 max_user_watches
2 下载安装 inotify
wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
tar -zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14.tar.gz
./configure --prefix=/usr/local/inotify #指定存放目录
make
make install
3 修改inotify 参数
3.1 命令修改
sysctl -w fs.inotify.max_user_instances=130
3.2 文件修改
vi /etc/sysctl.conf
fs.inotify.max_user_instances=130
4 参数说明
max_user_instances:每个用户创建inotify实例最大值
max_queued_events:inotify队列最大长度,如果值太小,会出现错误,导致监控文件不准确
max_user_watches:要知道同步的文件包含的目录数,可以用: find /home/www/lj -type d|wc -l 统计,必须保证参数值大于统计结果(/home/www/lj为同步文件目录)。
5 创建实时监控脚本
mkdir -p /opt/scripts
cd /opt/scripts
vi inotify_start.sh
*************
#!/bin/bash
/usr/local/inotify/bin/inotifywait -mrq -e modify,create,move,delete \
--fromfile '/opt/scripts/ffile' \
--timefmt '%y-%m-%d %H:%M:%S' --format '%T %w %f %e' \
--outfile '/tmp/rsync.log'
***************
inotifywait常用参数:
--fromfile 是从哪里读取要监控的文件路径
--timefmt 时间格式
%y年 %m月 %d日 %H小时 %M分钟 %S 秒
--format 输出格式
%T时间 %w路径 %f文件名 %e状态
--outfile 输出的文件路径
-m 始终保持监听状态,默认触发事件即退出。
-r 递归查询目录
-q 打印出监控事件
-e 定义监控的事件,可用参数:
open 打开文件
access 访问文件
modify 修改文件
delete 删除文件
create 新建文件
attrb 属性变更
vi /opt/scripts/ffile
/home/www/lj/
@/home/www/lj/exclude/
其中@标示开头的表示 这个路径是不记录的。
试着去在 /home/www/lj 下新建 删除或者修改一些文件 就会记录下来
记录的内容会在 /tmp/rsync.log
如果是搭配 rsync 那么把ffile里面路径
改成 相应模块的里的path
【lj】
path = /home/www/lj
如果有排除的在执行rsync命令时候 添加参数
--exclude-from '/opt/scripts/ex.lst'
rsync -azvp --port=873 --password-file=/etc/rsync.passwd --exclude-from '/opt/scripts/ex.lst' /home/www/jl/* root@127.0.0.1::lj
注意 ex.lst 里面要写相对路径(相对于src :/home/www/jl/ 而言)
如果想排除 /home/www/jl/exclude 文件夹
ex.list 里面就这么写 后面不要加 / 或者空格
exclude
这样就能 完成了 rsync+inotify 配置了。
注意:排除在外某个文件夹不同步 有两种做法
第一:在inotify 这不配置 在rsync 里配置
第二:在inotify 和rsync 里都配置
没有以下这种情况 在inotify里配置排除了 在rsync里不配置排除 这样是不其作用的。会根据 第一种配置方式走的。