一 rsync 安装脚本
#!/bin/bash
RY="/usr/bin/rsync"
if [ $(whereis rsync|cut -d' ' -f2) = ${RY} ];then
touch /etc/rsyncd.conf
else
yum install rsync -y
touch /etc/rsyncd.conf
fi
\cp $install_dir/conf/rsyncd.conf /etc/rsyncd.conf
\cp $install_dir/init.d/rsyncd /etc/init.d/rsyncd
chmod +x /etc/init.d/rsyncd
iptables -I INPUT -p tcp -m tcp --dport 873 -j ACCEPT
chkconfig -add rsyncd
/etc/init.d/rsyncd start
if [ `ps -ef | grep rsync | grep -v grep | wc -l` = 0 ]; then
Echo_Red "rsync 安装失败!"
fi
二 安装 inofity 工具
inotify工具安装配置
安装
1) 从内核和目录里面查看是否支持inotify
[root@nfs01 ~]
2.6.32-573.el6.x86_64
[root@nfs01 ~]
总用量 0
-rw-r--r-- 1 root root 0 1月 21 13:03 max_queued_events
-rw-r--r-- 1 root root 0 1月 21 13:03 max_user_instances
-rw-r--r-- 1 root root 0 1月 21 13:03 max_user_watches
2)检查是否有安装inotify 如果没有就安装
rpm -qa inotify-tools
没有就先安装epol源
yum.repos.d]
之后安装
或者直接下载安装
http://www.rpmfind.net/linux/epel/6/x86_64/Packages/i/inotify-tools-3.14-2.el6.x86_64.rpm
rpm -ivh .....rpm
[root@nfs01 ~]
三 服务器参数修改
[root@nfs01 ~]
/usr/bin/inotifywait
添加:
在/etc/sysctl.conf 上添加
fs.file-max = 65535
fs.inotify.max_queued_events=99999999
fs.inotify.max_user_watches=99999999
fs.inotify.max_user_instances=65535
然后重载
四 inotifywait 帮助
[root@nfsserver inotify-tools]
r :递归查询目录
q:打印很少的信息,仅仅打印监控事件的信息 安静状态
m:始终保持事件监听状态
excluder
timefmt:指定时间输出的格式
d :后台运行
-e: 事件 里面有很多方法
五 rsync+inotify结合脚本,实时同步
#!/bin/bash
src=/www/wwwroot
des=wwwroot
ip1=192.168.8.101
user=root
cd ${src}
/usr/bin/inotifywait -mrq --format '%Xe %w%f' -e modify,create,delete,attrib,close_write,move ./ | while read file
do
INO_EVENT=$(echo $file | awk '{print $1}')
INO_FILE=$(echo $file | awk '{print $2}')
echo "-------------------------------$(date)------------------------------------"
echo $file
if [[ $INO_EVENT =~ 'CREATE' ]] || [[ $INO_EVENT =~ 'MODIFY' ]] || [[ $INO_EVENT =~ 'CLOSE_WRITE' ]] || [[ $INO_EVENT =~ 'MOVED_TO' ]]
then
echo 'CREATE or MODIFY or CLOSE_WRITE or MOVED_TO'
rsync -avzcogR $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
fi
里不能做到指定文件删除,如果删除的路径越靠近>根,则同步的目录越多,同步删除的操作就越花时间。
if [[ $INO_EVENT =~ 'ATTRIB' ]]
then
echo 'ATTRIB'
if [ ! -d "$INO_FILE" ]
then
rsync -avzcogR $(dirname ${INO_FILE}) ${user}@${ip1}::${des}
fi
fi
done