inotify+rsync

#!/bin/bash
src=/hdd/rundata/datasys/init/       # 须要同步的源路径
des=inilog       # 目标服务器上 rsync --daemon 发布的名称,rsync --daemon这里就不作介绍了,网上搜一下,比较简单。
rsync_passwd_file=/etc/rsyncd/inilog.pass            # rsync验证的密码文件
inotify_home=/usr/local/include
ip1=10.98.0.3                 # 目标服务器1
user=inilog                            # rsync --daemon定义的验证用户名
cd ${src}                            
# 此方法中,因为rsync同步的特性,这里必需要先cd到源目录,inotify再监听 ./ 才能rsync同步后目录结构一致,有兴趣的同窗能够进行各类尝试观看其效果
${inotify_home}/bin/inotifywait -mrq --format  '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
# 把监控到有发生更改的"文件路径列表"循环
do
        INO_EVENT=$(echo $file | awk '{print $1}')      # 把inotify输出切割 把事件类型部分赋值给INO_EVENT
        INO_FILE=$(echo $file | awk '{print $2}')       # 把inotify输出切割 把文件路径部分赋值给INO_FILE
        echo "-------------------------------$(date)------------------------------------"
        echo $file
        echo ${INO_FILE}
        #echo $(dirname ${INO_FILE})
        #增长、修改、写入完成、移动进事件
        #增、改放在同一个判断,由于他们都确定是针对文件的操做,即便是新建目录,要同步的也只是一个空目录,不会影响速度。
        if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]         # 判断事件类型
        then
                echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO -- '
                rsync -avzcR --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des} #&&
# INO_FILE变量表明路径哦  -c校验文件内容
                #rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#仔细看 上面的rsync同步命令 源是用了$(dirname ${INO_FILE})变量 即每次只针对性的同步发生改变的文件的目录(只同步目标文件的方法在生产环境的某些极端
#环境下会漏文件 如今能够在不漏文件下也有不错的速度 作到平衡)
#而后用-R参数把源的目录结构递归到目标后面 保证目录结构一致性
        fi
        #删除、移动出事件
        if [[ $INO_EVENT =~ 'DELETE' ]] || [[ $INO_EVENT =~ 'MOVED_FROM' ]]
        then
                echo 'DELETE or MOVED_FROM -- '
                rsync -avzR --delete --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des} #&&
                #rsync -avzR --delete --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
#看rsync命令 若是直接同步已删除的路径${INO_FILE}会报no such or directory错误 因此这里同步的源是被删文件或目录的上一级路径
#并加上--delete来删除目标上有而源中没有的文件,这里不能作到指定文件删除,若是删除的路径越靠近根,则同步的目录月多,同步删除的操做就越花时间。
#这里有更好方法的同窗,欢迎交流。
        fi
        #修改属性事件 指 touch chgrp chmod chown等操做
        if [[ $INO_EVENT =~ 'ATTRIB' ]]
        then
                echo 'ATTRIB -- '
                if [ ! -d "$INO_FILE" ]
# 若是修改属性的是目录 则不一样步,由于同步目录会发生递归扫描,等此目录下的文件发生同步时,rsync会顺带更新此目录。
                then
                        rsync -avzcR --password-file=${rsync_passwd_file} ${INO_FILE} ${user}@${ip1}::${des} #&&         
                        #rsync -avzcR --password-file=${rsync_passwd_file} $(dirname ${INO_FILE}) ${user}@${ip2}::${des}
                fi
        fi
done

【rsync】git

yum -y install rsyncgithub

【inotify工具安装】bash

wget http://github.com/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz服务器

tar zxf inotify-tools-3.14.tar.gz工具

cd inotify-tools-3.14ui

./configure --prefix=/usr/local/include/   code

make && make install       orm

【rsyncd.conf配置】递归

# /etc/rsyncd: configuration file for rsync daemon mode

# See rsyncd.conf man page for more options.

# configuration example:

uid = nobody
gid = nobody
port = 873
use chroot = no
max connections = 10
timeout = 600
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
log file = /var/log/rsyncd.log
read only = false
hosts allow = 10.98.0.1
hosts deny = *
motd file = /etc/rsyncd/rsyncd.motd
strict modes = yes

# exclude = lost+found/
# transfer logging = yes
# ignore nonreadable = yes
# dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2

# [ftp]
#        path = /home/ftp
#        comment = ftp export area
#
###################
[inilog]
comment = projectinilog
path = /hdd/rundata/datasys/init
uid = root
git = root
transfer logging = true
ignore errors
auth users = inilog
secrets file = /etc/rsyncd/inilog.secrets
read only = false
list = no
##################

注意权限事件

inilog.pass 600

inilog.secrets 400

相关文章
相关标签/搜索
本站公众号
   欢迎关注本站公众号,获取更多信息