一、介绍:
inotify 是一种文件系统的变化通知机制,如文件增加、删除等事件可以立刻让用户态得知。从而达到文件实时同步的目的。
二、环境需求:
软件:inotify-tools-3.13.tar.gz
Os: centos5.3
Server1:192.168.2.87
Server2:192.168.2.88
需求 server1 目录 /opt/sites/mxfarm.rekoo.com 时时同步 server2 /tmp/test
三、环境搭建:
1、首先**内核支持inotify,如果不支持对内核打补丁,一般情况内核在 2.6.3以上的都支持的。
ludy@server1:~$ls -l /proc/sys/fs/inotify/
总用量 0
-rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_queued_events
-rw-r--r-- 1 ludy ludy 0 2008-12-16 14:40 max_user_instances
-rw-r--r-- 1 root root 0 2008-12-16 09:07 max_user_watches
如果没有的话,呵呵安装inotify
2、软件安装:
wget http://sourceforge.net/projects/inotify-tools/files/inotify-tools/3.13/inotify-tools-3.13.tar.gz/download
tar zxvf inotify-tools-3.13.tar.gz
cd inotify-tools-3.13
./configure
make && make install
ldconfig
3、生成SSH KEY 让 server1 ssh访问 server2不需要密码
ssh-keygen
然后把你用户目录下的 .ssh/id_rsa.pub 拷贝到 server2 的root下
scp id_rsa.pub root@192.168.2.88:~/.ssh
mv id_rsa.pub authorized_keys
chown root:root authorized_keys
chmod 600 authorized_keys
4、编辑配置文件inosync.sh
#!/bin/sh
SRC=/opt/sites/mxfarm.rekoo.com/
DST=root@192.168.2.88:/tmp/test
INWT=/usr/local/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
主要参数介绍:
$INWT -mrq -e create,move,delete,modify $SRC | while read D E F;do
rsync -aHqzt --delete $SRC $DST
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件~
-e create,move,delete,modify
监听 创建 移动 删除 写入 事件
rsync -aHqzt $SRC $DST
-a 存档模式
-H 保存硬连接
-q 制止非错误信息
-z 压缩文件数据在传输
-t 维护修改时间
-delete 删除于多余文件
四、运行并测试:
在server1上运行./inosync.sh &
cd /opt/sites/mxfarm.rekoo.com
touch hello
在server2上/tmp/test 下看看:
ls /tmp/test
hello
五、监控多目录,多文件,同步到多台服务器
脚本分析:
#!/bin/sh
#set -x
#var
src="/opt/sites/mxfarm.rekoo.com /opt/work" #将两个目录
des_ip="192.168.2.9 192.168.2.88" #同步到两台服务器
#function
inotify_fun ()
{
/usr/local/bin/inotifywait -mrq -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`"
echo "`date +%Y%m%d-%T`: rsync -avzq --delete --progress $1 $ip:/tmp/"
#rsync -avzq --delete --progress $1 $ip:`dirname $1`
rsync -avzq --delete --progress $1 $ip:/tmp/ 将mxfarm.rekoo.com和work目录同步到/tmp/目录下
echo
done
done
}
#main
for a in $src
do
inotify_fun $a &
done
六、可以对不同的ip 不同的目录创建多个脚本进行监控