首页 > 代码库 > rsync+inotify实时同步

rsync+inotify实时同步

                                            rsync+inotify实时同步


rsync 远程同步工具 

             工作机制为:通过rsync算法对源文件和目标文件特征码做对比,若相同则不复制不同才复制,因此相比与传统的【cp 和 scp---(直接覆盖) 而言具有以下优点


1,执行效率高

2,本身传输数据是明文的但是可借助ssh实现数据的安全传输

3,可以镜像保存整个目录树或FS

4,支持匿名传输


工作模式:


1shell模式         实现本地文件传输也称为本地模式

2,远程shell模式    利用ssh协议承载远程数据传输过程

3,列表模式         显示指定目标的列表,可以递归显示

4,服务模式         可以工作为守护进程接受客户端的同步请求

 

常用的命令选项



-n               做测试传输 不真正执行同步动作

-v           显示详情         --progress    显示进度  --stats          显示状态

-a                 -rlptgoD  归档

-q                 静默模式      

-c                 开启校验功能

-r                 递归

-g                保持属组

-o                保持属主

-u                强制跳过目标文件中那些modifiy time 新于源文件的文件

-p                保留文件权限

-t                 保留文件的时间戳

-l                 保留符号连接 

-D               保留设备文件

-e                启用ssh

-z                启用压缩

工作于守护进程的启用方法:

rsync是一个瞬时守护进程依赖于xinetd

rsync服务模式的配置文件语法结构

 
################global段1个###########
uid  = “用户名”                         
gid  =  “组名”
use chroot = “yes|no”
max connections = “number”
strict modes = “yes|no”
pid file = /path/rsyncd.pid
log file = /path/rsyncd.log
lock file = /path/rsyncd.lock
 
##########share段多个################
[share name]
path = /path/dir
ignore errs = “yes|no”
read only = “yes|no”
write only = “yes|no”
hosts allow = “networkaddr|host addr”
hosts deny = 同上或是*
list = “ture|false”
uid = ‘username’
gid =  ‘groupname’
auth users = username
secret file = 文件-------格式为username:password 一行一个


进程模式命令

Access via rsync daemon:

Pull: rsync [OPTION...] [USER@]HOST::SRC... [DEST]

    rsync [OPTION...] rsync://[USER@]HOST[:PORT]/SRC... [DEST]

Push: rsync [OPTION...] SRC... [USER@]HOST::DEST

rsync [OPTION...] SRC... rsync://[USER@]HOST[:PORT]/DEST




 

inotify 是一个应用程序编程接口 普通用户想使用可以借助inotify-tool这个应用程序

其有两个命令行工具

inotifywait:通过调用inotify api等待文件事件的发生并显示

inotifywatch:通过调用inotifyapi 实现对文件相关事件的收集

 



 

inotifywait的相应命令选项

         -m 持续监控 而默认是仅检测一次

         -r  表示递归 可监控目录及子目录文件

         -e  指定要监控文件发生的事件,默认是监控所有的事件;access, modify, attrib,close_write, close_nowirte, close, open, moved_to, moved_from, move, create,delete, delete_selt等;

           --format :自定义inotifywait的输出格式,如--format ‘%T %w %f‘;常用的格式符如下:

           %w:显示被监控文件的文件名;

           %f:如果发生某事件的对象是目录,则显示被监控目录的名字;默认显示为空串;

          %T:使用--timefmt选项中自定义的时间格式;

--timefmt :当在--format选项中使用%T时,使用此选项指定时间格式

          后常用的参数是‘%d/%m/%y %H:%M‘




下面将通过实验说明inotify+rsync的应用

wKioL1P6Esvi-R1dAAEIvmBAdWc417.jpg

部署server2

httpd安装在此不再赘述

vim /etc/xinet.d/rsync

wKiom1P6Eb6CpAOvAAEU4cfJsEc158.jpg



提供配置文件

vim /etc/rsyncd.conf

uid = nobody

gid = nobody

use chroot = no

max connections = 10

strict modes = yes

pid file = /var/run/rsyncd.pid

log file =/var/log/rsyncd.log

lock file =/var/lock/rsyncd.lock

 

[webpage]

path = /var/www/html

read only = no

write only =no

uid = root

gid = root

list = false

hosts allow = 172.16.0.1/16

hosts deny = *

auth users = server1

secrets file = /etc/rsyncd.passwd

 

提供密码文件

vim /etc/rsync.passwd

server1:hzm132

 

service xinetd restart

 

server1编译安装inotify-tool

./configure 

make && make install

 

为server1提供自动推送脚本
 
#!/bin/bash
#des : sync
#os ; linux
#date :2014-08-24
#######################VAR#################
DSTDIR="webpage"
SRCDIR="/var/www/html/"
RHOST="172.16.101.100"
USERNAME="server1"
USERPASSWD="/var/rsyncd.passwd"
LOGFILE="/var/log/rsyncd.log"
#####################SCRIPTS###############
export RSYNC_PASSWORD="hzm132"
inotifywait -m -r -q --format ‘%T %w%f   %e‘ --timefmt ‘%y-%m-%d    %H:%M:%S‘ -e create,modify,delete,attrib $SRCDIR| while read FILESTAT
do        
   rsync -a   $SRCDIR $USERNAME@$RHOST::$DSTDIR
   echo "$FILESTAT" >> $LOGFILE 2>&1
done


 

 

 



rsync+inotify实时同步