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 删除于多余文件