在linux环境下利用rsync和inotify实现单向实时同步

Inotify 是一个 Linux特性,它监控文件系统操作,比如读取、写入和创建。Inotify 反应灵敏,用法非常简单,并且比 cron 任务的繁忙轮询高效得多。

前提:192.168.0.1,192.168.0.2和192.168.0.3,1为主

1,在192.168.0.1上下载inotify-tools-3.13-1.i386.rpm和inotify-tools-devel-3.13-1.i386.rpm并安装。

http://www.baidupcs.com/rest/2.0/pcs/file?method=batchdownload&app_id=250528&zipcontent=%7B%22fs_id%22%3A%5B419923751874731%2C309325119372187%5D%7D&sign=DCb740ccc5511e5e8fedcff06b081203:ogLO8isdtnzw4tQw3AyV90Fb%2BSc%3D&uid=3626875272&time=1400228373&prisign=unknow&zipname=%E3%80%90%E6%89%B9%E9%87%8F%E4%B8%8B%E8%BD%BD%E3%80%91inotify-tools-devel-3.13-1.i386%E7%AD%89.zip&cflg=65535%3A1


2,写脚本rsync.sh

#!/bin/sh
#set -x
src="/usr/local/nginx/conf   /opt/tomcat"                                                           #同步目录,可以多个目录,以空格隔开
des_ip="192.168.0.2 192.168.0.3"                                                                  #同步ip,可以多个IP,以空格隔开
#function
#function
inotify_fun ()
{
/usr/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 --partial --progress $1 $ip:`dirname $1`"
rsync -avzq --delete --exclude-from=/shell/exclude_file --partial --progress $1 $ip:`dirname $1`     #将当下目录不需要同步的文件写入exclude_file
echo
done
done
}
#main
for a in $src
do
inotify_fun $a &
done


3,编写/shell/exclude_file

假如不想将/usr/local/nginx/conf下的nginx.conf和/opt/tomcat下的Catalina.sh同步,那么

vi exclude_file

nginx.conf

catalina.sh


4,对192.168.0.2和3做信任,免认证登陆

在192.168.0.1上操作

# ssh-keygen -t rsa

一路回车

#ssh-copy-id -i .ssh/id_rsa.pub 192.168.0.2

提示输入0.2的密码

输入密码,敲回车

OK!然后ssh 192.168.0.2,是不是不用输密码就进入了呢

那么就就成功了

然后192.168.0.3也做下免认证登陆

#ssh-copy-id -i .ssh/id_rsa.pub 192.168.0.3


5,最后,将rsync.sh后台运行

nohup sh rsync.sh &

或者写几个小脚本

vim start_rsync.sh

nohup /shell/rsync.sh >> /shell/nohup.out&


vim  kill_rsync.sh 

#!/bin/bash
#若同步目录有增加或减少,请结束所有实时同步进程,然后在开同步脚本,文件在同步时请勿使用此脚本
kill -9 `ps -ef|grep -v grep|grep inotifywait |awk '{print $2}'` && kill -9 `ps -ef|grep -v grep|grep rsync| awk '{print $2}' `


6,test

在192.168.0.1的同步目录下建一个文件或目录,然后查看192.168.0.2和3上在相同目录下是不是也有了呢


ps:常遇问题

有时候当设置的同步目录过多的时候,就需要把/proc/sys/fs/inotify/max_user_watches 数值调大,默认是8192

用vi修改不了这个数值,所以echo 8192000 > /proc/sys/fs/inotify/max_user_watches

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值