参考
http://ilanni.blog.51cto.com/526870/1605200
inotify-tools与rsync集成
inotify-tools与rsync的集成主要是通过inotifywait命令与rsync命令集成来实现的,并且该集成主要是体现的rsync客户端,而rsync服务器端正需要按照正常的配置进行即可。
注意:该集成的主要目的是把rsync客户端需要备份的文件实时推送到rsync服务器上。
inotifywait命令详解
有关inotifywait的使用方法,我们可以通过它的帮助信息查看
-m表示始终保持事件监听状态。
-r表示递归查询目录。
-q表示打印出监控事件。
-e通过此参数可以指定要监控的事件。可监听的事件,如下:
access:访问,读取文件。
modify:修改,文件内容被修改。
attrib:属性,文件元数据被修改。
move:移动,对文件进行移动操作。以及重命名,对文件进行重命名。
create:创建,生成新文件
open:打开,对文件进行打开操作。
close:关闭,对文件进行关闭操作。
delete:删除,文件被删除。
--timefmt是指定时间的输出格式,用于--format选项中的%T格式。
--format指定文件变化的详细信息输出格式。格式参数如下:
%w表示发生事件的目录
%f表示发生事件的文件
%e表示发生的事件
%T使用由--timefmt定义的时间格式
%Xe事件以“X”分隔
8.2 inotifywait命令实例
8.1章节我们讲解了inotifywait命令的参数,下面我们来实际使用下inotifywait命令。
我们要监测/home目录下所有文件及目录的变化情况,命令如下:
inotifywait -mrq --timefmt ‘%y/%m/%d/%H:%M‘ --format ‘%T %w %f %e‘ -e modify,delete,create,attrib,move,open,close,access /home/
inotifywatch参数说明如下:
-h:输出帮助信息。
-v:输出详细信息。
@:排除不需要监视的文件,可以是相对路径,也可以是绝对路径。
–-fromfile:从文件读取需要监视的文件或排除的文件,一个文件一行,排除的文件以@开头。
-z:输出表格的行和列,即使元素为空。
–-exclude:正则匹配需要排除的文件,大小写敏感。
–-excludei:正则匹配需要排除的文件,忽略大小写。
-r:监视一个目录下的所有子目录。
-t:设置超时时间。
-e:只监听指定的事件。该事件与inotifywait监听的事件类型一样。
-a:以指定事件升序排列。
-d:以指定事件降序排列。
inotifywatch命令实例
我们讲解了inotifywatch命令的参数,下面我们来实际使用下inotifywatch命令。
要求统计60秒内/home目录下文件系统的事件,使用如下命令:
inotifywatch -v -e modify,delete,create,attrib,move,open,close,access -e modify -t 60 -r /home
下面我们的所有操作都是在rsync客户端上进行的,其实inotifywait命令与rsync命令集成,我们所要做的只是写一个shell脚本即可
#!/bin/bash
src=/home/back/
dest=www
ip=xx
/usr/bin/inotifywait -mrq --timefmt ‘%d/%m/%y%H:%M‘ --format ‘%T %w %f‘ -e modify,delete,create,attrib $src | while read DATE TIME DIR FILE;
do
filechange=${DIR}${FILE}
/usr/bin/rsync -avz --delete --progress $src [email protected]$ip::$dest --password-file=/etc/rsyncd.password &
echo "At ${TIME} on ${DATE}, file $filechange was backed up via rsynce" >>/tmp/rsync.log 2>&1
done
上述脚本写好后,我们要给予其执行权限,然后配置其开机后台运行,并启动。使用如下命令:
chmod 700 inotify.sh
chmod u+x inotify.sh
ll |grep inotify.sh
echo "sh /root/inotify.sh > /dev/null &" >>/etc/rc.local
sh inotify.sh > /dev/null &