Chinaunix首页 | 论坛 | 博客
  • 博客访问: 94724
  • 博文数量: 42
  • 博客积分: 2510
  • 博客等级: 少校
  • 技术积分: 480
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-16 13:39
文章分类

全部博文(42)

文章存档

2011年(1)

2010年(6)

2009年(35)

我的朋友

分类: LINUX

2009-08-24 17:16:41

linux+inotify+ssh实时同步
 
环境
Server:Linux 2.6.16.21-0.8-default(SUSE 10)
Client:Linux 2.6.9-89.ELsmp (RedHat 4)
SuSe  10--172.16.12.85
RedHat 4--172.16.12.87
软件:inotify-tools-3.13.tar.gz
目的
87的/home/ludy目录实时同步85的/home/ludy/rsync目录下的文件,在各自服务器上提前创建好对应目录
操作步骤
一、在85上创建ssh生成密钥
love:~ # ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): 直接回车
Enter passphrase (empty for no passphrase): 直接回车
Enter same passphrase again: 直接回车
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
55:bc:66:9c:19:ac:bf:d1:4f:e3:bf:14:33:11:74:91
二、将密钥中的公钥传到87上
love:~ # cd .ssh/
love:~/.ssh # scp id_rsa.pub
The authenticity of host '172.16.12.87 (172.16.12.87)' can't be established.
RSA key fingerprint is ec:32:99:54:dd:b5:ec:cf:5c:99:dc:bf:3e:95:a7:bf.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '172.16.12.87' (RSA) to the list of known hosts.
password:
id_rsa.pub                                    100%  391     0.4KB/s   00:00  
三、在87上对生成的公钥进行如下修改
love:~ # ssh 172.16.12.87
password:
Last login: Fri Aug 14 11:06:46 2009 from 172.16.12.85
[root@localhost ~]# cd .ssh/
[root@localhost .ssh]# mv id_rsa.pub authorized_keys
[root@localhost .ssh]# chown root:root authorized_keys
[root@localhost .ssh]# chmod 600 authorized_keys
四、测试从85使用ssh连到87,理论上是不需要输入密码的(一定要达到这样的效果)
love:~ # ssh 172.16.12.87
Last login: Fri Aug 14 11:36:25 2009 from 172.16.12.85
[root@localhost ~]#
五、在85上安装inotify
love:/home # tar -zxvf inotify-tools-3.13.tar.gz
love:/home # cd inotify-tools-3.13/
love:/home/inotify-tools-3.13 # ls
AUTHORS      Makefile.in     config.h       configure.ac     man
COPYING      NEWS            config.h.in    depcomp          missing
ChangeLog    README          config.log     install-sh       src
INSTALL      aclocal.m4      config.status  libinotifytools  stamp-h1
Makefile     autom4te.cache  config.sub     libtool
Makefile.am  config.guess    configure      ltmain.sh
love:/home/inotify-tools-3.13 # make
love:/home/inotify-tools-3.13 # make install
六、创建inotify脚本
love:/home # more inosync.sh
#!/bin/sh
SRC=/home/ludy/rsync/

INWT=/usr/local/inotify/bin/inotifywait
RSYNC=/usr/bin/rsync
 
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
        $RSYNC -aHqzt --delete $SRC $DST
done
love:/home # chmod +x inosync.sh
七、测试
love:/home # ./inosync.sh &  后台运行
[1] 12475
love:/home/ludy/rsync # touch aa bb cc dd   
回到87上查看,发现也有出现该4个文件
[root@localhost ludy]# pwd
/home/ludy
[root@localhost ludy]# ls
aa  bb  cc  dd
love:/home/ludy/rsync # rm -rf aa
love:/home/ludy/rsync # ls
bb cc dd
回到87上查看,发现也少了一个aa文件
[root@localhost ludy]# ls
bb cc dd
love:/home/ludy/rsync # vi aa
 
ddddddddddddd
ddddddddddddddd
~
love:/home/ludy/rsync # ls -l
total 4
-rw-r--r-- 1 root root 30 Aug  8 18:24 aa
-rw-r--r-- 1 root root  0 Aug  8 18:11 bb
-rw-r--r-- 1 root root  0 Aug  8 18:12 ee
回到87上查看发现有明显变化
[root@localhost ludy]# ls -l
total 4
-rw-r--r--  1 root root 30 Aug  8 18:24 aa
-rw-r--r--  1 root root  0 Aug  8 18:11 bb
-rw-r--r--  1 root root  0 Aug  8 18:12 ee
八、注意
1、若直接去删除87上的bb cc dd后,85上的bb cc dd并不会自动删除
   但当85上再新建一个aa时,发现这个时候87上又会多出aa bb cc dd 4个文件
2、若直接在87上对文件aa进行编辑,则在85上是不会有变化
[root@localhost ludy]# vi aa
ddddddddddddd
ddddddddddddddd
eeeeeeeeeeee
"aa" 3L, 43C written                                          
[root@localhost ludy]# ls -l
total 4
-rw-r--r--  1 root root 43 Aug 14 12:18 aa
-rw-r--r--  1 root root  0 Aug  8 18:11 bb
-rw-r--r--  1 root root  0 Aug  8 18:12 ee
love:/home/ludy/rsync # more aa
ddddddddddddd
ddddddddddddddd
love:/home/ludy/rsync # ls -l
total 4
-rw-r--r-- 1 root root 30 Aug  8 18:24 aa
-rw-r--r-- 1 root root  0 Aug  8 18:11 bb
-rw-r--r-- 1 root root  0 Aug  8 18:12 ee
3、这时若在85上再建立一个文件dd,则会发现87会再次进行与85的同步,原来修改过的文件又会还原
love:/home/ludy/rsync # touch dd
love:/home/ludy/rsync # ls -l
total 4
-rw-r--r-- 1 root root 30 Aug  8 18:24 aa
-rw-r--r-- 1 root root  0 Aug  8 18:11 bb
-rw-r--r-- 1 root root  0 Aug  8 18:28 dd
-rw-r--r-- 1 root root  0 Aug  8 18:12 ee
[root@localhost ludy]# ls -l
total 4
-rw-r--r--  1 root root 30 Aug  8 18:24 aa
-rw-r--r--  1 root root  0 Aug  8 18:11 bb
-rw-r--r--  1 root root  0 Aug  8 18:28 dd
-rw-r--r--  1 root root  0 Aug  8 18:12 ee
[root@localhost ludy]# more aa
ddddddddddddd
ddddddddddddddd
九、每次开机自动运行监控脚本
love:~ # echo "/home/inosync.sh &">> /etc/rc.d/rc

十、附脚本解释
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do      
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件~
-e create,move,delete,modify
监听 创建 移动 删除 写入 事件

$RSYNC -aHqzt --delete $SRC $DST
-a 存档模式
-H 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件
阅读(635) | 评论(0) | 转发(1) |
给主人留下些什么吧!~~