博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
inotify + rsync 实现 linux 文件实时同步
阅读量:7254 次
发布时间:2019-06-29

本文共 3013 字,大约阅读时间需要 10 分钟。

inotify + rsync实现linux文件实时同步

作者:ZIY

出处:


一.项目需求:

服务器A的数据目录内容变化后,改变要实时更新到多台服务器B C 的相关目录。

二.解决方法:

    1、多台服务器做为rsync服务器端,服务器A做为rsync客户端,使用rsync命令同步数据内容。

    2、inotify做为触发器,当服务器A数据目录内容变化时,执行rsync命令同步数据。

    A  192.168.13.151  

    B  192.168.13.252

    C  192.168.13.253

三.安装配置

服务器端BC (192.168.13.252 192.168.13.253)

# wget 

# tar zxvf rsync-3.0.7.tar.gz

# cd  rsync-3.0.7

# ./configure –prefix=/usr/local/rsync

# make

# maek install

# vi /etc/rsyncd.conf



uid = root

gid = root

use 
chroot
 = no

max connections = 
10

pid 
file
 =  
/
var
/
run
/
rsyncd.pid

lock 
file
 = 
/
var
/
run
/
rsync.lock

log 
file
 =  
/
var
/
log
/
rsync.log

[
images
]

path = 
/
opt
/
images

read
 only = no

auth 
users
 = valeRsync

secrets 
file
 = 
/
etc
/
rsyncd.secrets

建立用户认证文件

# echo -ne “valeRsync:Vale.com-init” >   /etc/rsyncd.secrets

# chmod 600 /etc/rsyncd.secrets

开机自动执行

# echo -ne “rsync –daemon –config=/etc/rsyncd.conf”   >> /etc/rc.local

启动服务

# /usr/local/rsync/bin/rsync –daemon –config=/etc/rsyncd.conf

客户端A (192.168.13.251)

# wget 

# tar zxvf rsync-3.0.7.tar.gz

# cd  rsync-3.0.7

# ./configure –prefix=/usr/local/rsync

# make

# maek install

# wget 

# tar zxvf inotify-tools-3.13.tar.gz

# cd inotify-tools-3.13

# ./configure –prefix=/usr/local/inotify

# make

# make install

建立用户密码文件

# echo -ne “Vale.com-init”  > /etc/rsyncd.secrets

# chmod 600 /etc/rsyncd.secrets

开机自动执行

# echo -ne ‘/root/InotifyRsync.sh &’ >> /etc/rc.local

我的脚本

# vi  /root/InotifyRsync.sh



#!/bin/bash

host_1
=192.168.13.252

host_2
=192.168.13.253


src
=
/
opt
/
image
/

dst
=images

user
=valeRsync


/
usr
/
local
/
inotify
/
bin
/
inotifywait 
-mrq
 
--timefmt
 
'%d/%m/%y %H:%M'
 
--format
 
'%T %w%f'
 
-e
 modify,delete,create,attrib 
$src
 
|
 
while
read
 
file

    
do

    rsync 
-avzP
 
--delete
  
--password-file
=
/
etc
/
rsyncd.secrets 
$src
 
$user
@
$host_1
::
$dst
  
>
 
/
dev
/
null

    rsync 
-avzP
 
--delete
  
--password-file
=
/
etc
/
rsyncd.secrets 
$src
 
$user
@
$host_2
::
$dst
  
>
 
/
dev
/
null

    
#echo "${file} was rsynced"

done

exit
 
0

四.inotify支持的触发事件

IN_ACCESS,即文件被访问

IN_MODIFY,文件被 write

IN_ATTRIB,文件属性被修改,如 chmod、chown、touch 等

IN_CLOSE_WRITE,可写文件被 close

IN_CLOSE_NOWRITE,不可写文件被 close

IN_OPEN,文件被 open

IN_MOVED_FROM,文件被移走,如 mv

IN_MOVED_TO,文件被移来,如 mv、cp

IN_CREATE,创建新文件

IN_DELETE,文件被删除,如 rm

IN_DELETE_SELF,自删除,即一个可执行文件在执行时删除自己

IN_MOVE_SELF,自移动,即一个可执行文件在执行时移动自己

IN_UNMOUNT,宿主文件系统被 umount

IN_CLOSE,文件被关闭,等同于(IN_CLOSE_WRITE | IN_CLOSE_NOWRITE)

IN_MOVE,文件被移动,等同于(IN_MOVED_FROM | IN_MOVED_TO)

备注:



#!/bin/sh

#set -x

#var 

src
=
"/usr/local/nginx/html/lib /usr/local/nginx/html/www /usr/local/nginx/html/var/www.work.com.conf.php"

des_ip
=
"172.18.1.35 172.18.1.36 172.18.1.37 172.18.1.38"

#function

inotify_fun 
(
)

{

/
usr
/
local
/
bin
/
inotifywait 
-mrq
 
--timefmt
 
'%d/%m/%y-%H:%M'
 
--format
 
'%T %w%f'
 
-e
 modify,delete,create,move $
1

|
 
while
 
read
 
time
 
file

do

for
 ip 
in
 
$des_ip

do

echo
 
"`date +%Y%m%d-%T`: rsync -avzq --delete --progress $1 $ip:`dirname $1`"

rsync 
-avzq
 
--delete
 
--progress
 $
1
 
$ip
:
`
dirname
 $
1
`

echo

done

done

}


#main

for
 a 
in
 
$src

do

inotify_fun 
$a
  
&

done
 

转载于:https://www.cnblogs.com/leonxyzh/archive/2012/12/29/7289134.html

你可能感兴趣的文章
New Concept English Two 15 37
查看>>
L125
查看>>
poj2192
查看>>
json的内容回顾
查看>>
SAP将内表生成XML作为excel保存到FTP
查看>>
栅格系统
查看>>
[Selenium] 使用自定义的FirefoxProfile
查看>>
Spine批量导出Command line Export
查看>>
POJ3690:Constellations——题解
查看>>
第二次毕业设计任务书
查看>>
sts安装出现could not find jar:file解决办法
查看>>
Maven中POM.XML详解
查看>>
小时候,长大了
查看>>
一次服务器被入侵后的分析
查看>>
Ubuntu sudo 出现 is not in the sudoers file解决方案
查看>>
转 Linux文件管理
查看>>
Android中资源文件assets和res下面raw文件的使用不同点
查看>>
汉子字符转换成大写英文字母开头。。
查看>>
Android实现左右滑动指引效果
查看>>
SQL优化(数据库的优化)
查看>>