inotify+rsync实战演练
试验目的:
演练rsync结合inotify实现服务端目录内文件有变动(包括修改,删除,创建)时,自动立即同步到客户端
试验环境:
centos6.5 192.168.10.89 —–角色:文件同步服务器.原始文件服务器.rsync客户端,inotify服务器
centos 6.5 192.168.10.103—–角色:文件同步客户端,由文件服务器自动向客户端同步
关于rsync和inotify介绍和具体用法.请参考其他笔记内容
实战步骤
一.在inotify服务器安装inotify-tools工具
安装过程简单:
1 | tar zxvf inotify-tools-3.13.tar.gz |
二.演示inotify使用方法:
执行命令:
1 | inotifywait -rm --format '%Xe %w%f' -e modify,create,delete,attrib /tmp/data |
命令输出:
1 | [root@oracle inotify-tools-3.13]# inotifywait -rm --format '%Xe %w%f' -e modify,create,delete,attrib /tmp/data |
解析:
inotifywait : 持续监控文件的状态变化
-r : 递归监控目录下的所有文件,包括子目录.
Note:如果要监控的目录中文件数量巨大,则通常需要修改/proc/sys/fs/inotify/max_users_watchs内核参数,因为其默认值为8192.
-m: 实现持续监控
–format 显示格式.
- %X—-事件以”X”分隔.
- %e—-显示事件(比如CREATE,MODIFY等),
- %w—-显示文件名
- %f—–显示目录
- -e: 表示检测哪些事件
/tmp/data——-监测的目录路径
再开启一个终端,然后在/tmp/data目录下新建一些文件:
1 | [root@localhost data]# touch {x,y,z,u,v,w}.txt |
inotify输出如下:
检测到了文件变化.第一列是事件类型.有CREATE,ATTRIB. 第二列是文件的完整路径
1 | [root@oracle inotify-tools-3.13]# inotifywait -rm --format '%Xe %w%f' -e modify,create,delete,attrib /tmp/data |
再试着删除所有文件:
1 | [root@localhost data]# rm -rf {x,y,z,u,v,w}.txt |
inotify检测到DELETE事件:
1 | DELETE /tmp/data/x.txt |
试试创建和删除目录检测到CREATE和DELETE的目录事件:
1 | CREATEXISDIR /tmp/data/test |
试试修改文件内容
1 | [root@localhost data]# echo "haha" > 1.txt |
检测到MODIFY事件:
1 | CREATE /tmp/data/1.txt |
基本用法就介绍到这里.下面实战演练inotify+rsync结合做目录文件同步
在inotify编写脚本文件:
1 | 以下是工作在相对路径下 |
1 | 以下是工作在绝对路径下: |
Note:此脚本中的rsync使用的是ssh协议传输.而不是守护模式.所以需要实现传输本地的公钥到远程主机相关用户下
运行脚本:
1 | [root@localhost ~]# ./inotify_rsync.sh |
在/tmp/data目录内创建文件:
1 | [root@localhost data]# touch {1,2,3,4,5,6}.txt |
脚本输出:
1 | [root@oracle ~]# ./inotify_rsync.sh |
在172.16.1.120客户端的/tmp/data目录下查看文件: 文件已成功复制:
1 | [root@www ~]$ll /tmp/data |
演示在Inotify服务上删除刚创建的文件: 监测到文件删除
1 | [root@oracle ~]# ./inotify_rsync.sh |
在172.16.1.120服务器上查看/tmp/data目录.下面没有任何文件
1 | [root@www ~]$ll /tmp/data |
演示:新建一个目录.且在该目录下创建内容 脚本输出:
1 | CREATEXISDIR /tmp/data/haha |
目录已经被同步
1 | [root@www ~]$ll /tmp/data |