首页 > 代码库 > Rsync+Inotify实时监听备份

Rsync+Inotify实时监听备份


说明,下面的inotify是建立在rsync的配置过程

大前提是rsync daemon 配置成功,rsync配置看上一遍博文,在客户端可以推拉数据,然后才能配置inotify服务----inotify是在客户端安装,监听需要备份的目录,然后推送到服务端

查看当前系统是否支持inotify

[root@NFSServer bier]# uname -r

2.6.32-431.el6.i686

[root@NFSServer bier]# ls -l /proc/sys/fs/inotify/

×üóá 0

-rw-r--r-- 1 root root 0 11 11 22:30 max_queued_events

-rw-r--r-- 1 root root 0 11 11 22:30 max_user_instances

-rw-r--r-- 1 root root 0 11 11 22:30 max_user_watches

#显示着三个文件证明支持


一、安装inotify服务

1)下载inotify 源码包

[root@NFSServer src]# cd /usr/local/src

提示: download inotify-tools

inotify-tools-3.14.tar.gz


2)编译安装inotify

[root@NFSServer src]# tar -xvf inotify-tools-3.14.tar.gz

[root@NFSServer src]# cd inotify-tools-3.14

[root@NFSServer inotify-tools-3.14]# ./configure --prefix=/usr/local/inotify-tools-3.14

 make&make install


[root@NFSClient local]# ls

bin  games     lib      python  share

etc  include  inotify-tools-3.14  libexec  sbin    src

[root@NFSClient local]# cd inotify-tools-3.14/


[root@NFSClient inotify-tools-3.14]# ll

total 16

drwxr-xr-x. 2 root root 4096 Nov 10 03:21 bin  ==》inotify执行命令

drwxr-xr-x. 3 root root 4096 Nov 10 03:21 include ==》头文件

drwxr-xr-x. 2 root root 4096 Nov 10 03:21 lib ==》动态链接库文件

drwxr-xr-x. 4 root root 4096 Nov 10 03:21 share ==》帮助文档


inotify常用参数命令详解

[root@NFSClient inotify-tools-3.14]# ./bin/inotifywait –help



二、测试inotify

测试create文件

[root@NFSClient local]# /usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e create /data

10/11/15 03:35 /data/backup.bat


提示:此命令是inotify监控的命令,m是持续监听,r是递归,q是只打印事件,后面是时间格式

-e是指定要监听的时间,data是监控的目录



另外新开一个窗口在data目录下创建文件touch backup.bat   发现上面监听的备份目录发生变化


以下操作都需要再另外开个窗口创建,删除,修改文件测试


测试delete

[root@NFSClient local]# /usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e delete /data


测试close_write(写文件监听,就是写完就提示)

[csbmoon@NFSClient ~]$ /usr/local/inotify-tools-3.14/bin/inotifywait -mrq --timefmt ‘%d/%m/%y %H:%M‘ --format ‘%T %w%f‘ -e close_write /data

10/11/15 04:04 /data/aa.log


去掉时间格式显示,简化一下

[csbmoon@NFSClient ~]$ /usr/local/inotify-tools-3.14/bin/inotifywait –mrq  --format ‘%w%f‘ -e cteate /data



三、简单监听备份脚本

vim backup.sh

cmd="/usr/local/inotify-tools-3.14/bin/inotifywait" 

$cmd -mrq --format ‘%w%f‘ -e create,close_write,delete /data|\

while read line

do

  rsync -az $line rsync_backup@192.168.3.188::bier --password-file=/etc/rsync.password

done


把管道后面的一行一行交给line处理,因为backup如果有变化是一个带路径的,上面实验过


提示:实时监听备份脚本,针对的是备份目录里面的文件,这个脚本删除就不行出错,因为他不是针对目录备份的



改进backup.sh

vim backup1.sh

cmd="/usr/local/inotify-tools-3.14/bin/inotifywait"

$cmd -mrq --format ‘%w%f‘ -e create,close_write,delete /data|\

while read line

do

  [ ! -e "$line" ] && continue

  rsync -az --delete $line rsync_backup@192.168.3.188::bier --password-file=/etc/rsync.password

done


当文件不存在的时候就continue,避免了出错,因此这个脚本可以用来简单的创建文件备份使用


四、按照目录实时监听备份

host=192.168.3.188

src=http://www.mamicode.com/data

dst=bier

user=rsync_backup

rsync_passfile=/etc/rsync.password

inotify_home=/usr/local/inotify-tools-3.14/


if [ ! -e "$src" ] \

|| [ ! -e "${rsync_passfile}" ] \

|| [ ! -e "${inotify_home}/bin/inotifywait" ] \

|| [ ! -e "/usr/bin/rsync" ];

then

  echo "Check File and Folder"

  exit 9

fi


${inotify_home}/bin/inotifywait -mrq --format ‘%w%f‘ -e create,close_write,delete,attrib /$src|\

while read line

   do

      cd $src && rsync -aruz -R --delete ./ --timeout=100 $user@$host::$dst --password-file=${rsync_passfile} >/dev/null 2>&1

   done

exit 0


加大关键参数

[root@NFSClient scripts]# cat /proc/sys/fs/inotify/max_user_watches 

8192

[root@NFSClient scripts]# cat /proc/sys/fs/inotify/max_queued_events 

16384



本文出自 “比尔linux运维笔记” 博客,请务必保留此出处http://chenshoubiao.blog.51cto.com/6159058/1881341

Rsync+Inotify实时监听备份