inotifyinotify 实时同步文件脚本该怎么写

李振良OK 的BLOG
用户名:李振良OK
文章数:151
评论数:217
访问量:195529
注册日期:
阅读量:5863
阅读量:12276
阅读量:359632
阅读量:1055649
51CTO推荐博文
1、环境及相关软件介绍操作系统:Ubuntu12.04_x64源服务器(推送):192.168.18.10目标服务器(备份):192.168.18.20rsync:& rsync是unix系统下的数据镜像备份工具,是一款快速增量备份工具(远程同步),支持本地复制,或者与其他SSH(安全传输)、rsync主机同步。rsync有以下常用的参数:&&& -v,--verbose 显示同步过程的详细信息&&& -a,--archive 归档模式,表示以递归方传输文件,并保持所有文件属性,等同于-rlptgoD&&& -r,--recursive 对子目录以递归模式处理&&& -z,--compress 对备份的文件在传输时进行压缩处理&&& -l,--links 保留软连接&&& -H,--hard-links 保留硬链接&&& --delete 删除那些DST中SRC没有的文件(源服务器删除文件,目标服务器也同时删除)&&& --progress 显示备份过程,等同于-P&&& --port=PORT 指定rsync服务端口&&& --exclude=FILE 排除一个目录或文件(排除多个目录时,可以写多个--exclude)& & --exclude-from=FILE &排除多个目录或文件,FILE里面写多个要排除的目录inotify: &inotify是一个Linux特性,它监控文件系统操作,比如读取、写入和创建,当文件系统有变化时,则会触发inotify。inotify提供inotify-tools工具,这个工具包含两个功能,一个是inotifywait,用来监控文件系统变化的事件,另一个是inotifywatch,用来统计文件系统访问的次数。我们这次使用inotifywait结合rsync实现实时同步功能。inotifywait有以下常用参数:-m,--monitor 一直保持监听事件-r,--recursive 递归监控目录-q,--quiet 只打印触发的事件-e,--event 指定监视时间--timefmt 指定时间格式,用于-format选型中的%T格式--format 指定输出格式。%w 表示发生事件的目录%f 表示发生事件的文件%e 表示发生的事件%T 使用由―timefmt定义的时间格式inotifywait常用监视事件:access 文件或目录读取modify 文件或目录更改attrib 文件或目录属性更改move &文件或目录移动create 文件或目录创建delete 文件或目录删除2、目标服务器安装与配置#&sudo&apt-get&install&rsync&&&&#ubuntu系统默认已安装
#&sudo&cp/usr/share/doc/rsync/examples/rsyncd.conf&/etc/
#&sudo&vi&/etc/rsyncd.conf
#&以下是全局配置
log&file&=&/var/log/rsyncd.log
pid&file&=&/var/run/rsyncd.pid
lock&file&=&/var/lock/rsyncd
#以下是模块选项配置
[home]&&&&&#模块名,在源服务器指定这个名字
&&&comment&=&sync&rsync/home&&&&&&#描述信息
&&&path&=&/home/rsync&&&&&&#备份目录
&&&use&chroot=no&&&&&&&&&&&#不使用chroot,不用root权限
&&&read&only&=&no&&&&&&&&&&#设置本地备份目录为读写权限
&&&uid=root&&&&&&&&&&
&&&gid=root
&&&max&connections=10&&&&&&&#客户端最大连接数
&&&auth&users&=&rsync&&&&&&#指定数据同步用户
&&&secrets&file&=&/etc/rsyncd.pass&&&&&&&&&&#指定数据同步用户信息文件
&&&hosts&allow=192.168.18.0/24&&&&&#允许连接的客户端
&&&ignore&errors&=&yes&&&&&#忽略出现I/O错误
&&&timeout&=&600&#创建认证文件#&sudo&vi&/etc/rsyncd.pass
rsync:123456&&&&&&#格式是用户名:密码
#&sudo&chmod&600&/etc/rsyncd.pass&&&&&&#属主要有权限读这个文件,否则会报没权限
#&sudo&/etc/init.d/rsync&start&&&&&#如果启动报如下错误,则根据提示打开/etc/default/rsync文件,将RSYNC_ENABLE=false该为RSYNC_ENABLE=true,再重启即可。
*&rsync&daemon&not&enabled&in/etc/default/rsync,&not&starting...
#,查看是否启动,有rsync监听端口说明正常:
#&sudo&netstat&-antp&|grep&rsync
tcp&&&&&&&&0&&&&&0&0.0.0.0:873&&&&&&&&&&&&0.0.0.0:*&&&&&&&&&&&&&&&LISTEN&&&&&&29605/rsync博客地址:http://lizhenliang. 3、源服务器安装与配置#&sudo&apt-get&install&rsync&inodify-tools
#rsync不用配置,因为我们只使用rsync命令,紧接着创建认证文件
#&sudo&vi&/etc/rsyncd.pass
123456&&&&&#只写密码
#&sudo&chmod&600/etc/rsyncd.pass&#此时基本配置完成,测试下是否能推送吧!#&rsync&-avzP&--password-file=/etc/rsyncd.pass&--delete&/home/rsync&rsync@192.168.18.20::home&&&#home即是目标服务器上rsync里面的模块名
sending&incremental&file&list
&&&&&&&&&&&0&100%&&&&0.00kB/s&&&0:00:00&(xfer#1,&to-check=5/7)
sent&354&bytes&&received&126&bytes&&960.00&bytes/sec
total&size&is&0&&speedup&is&0.00&#出现以上信息说明同步正常,接下来,就该编写Shell脚本,使用inotifywait做实时监控源目录,加个while循环判断源目录是否有触发,如果有变化则执行rsync同步,并记录日志:#&vi&inotify_rsync.sh
#!/bin/bash
SRC='/home/rsync'
DST='rsync@192.168.18.20::home'
/usr/bin/inotifywait&-mrq&--timefmt&'%y-%m-%d&%H:%M'&--format&'%T&%w&%f&%e'&-e&create,delete,move,modify&$SRC|while&read&files
&&&&rsync&-avzP&--password-file=/etc/rsyncd.pass&--delete&$SRC&$DST
&&&&echo&"$files&was&rsynced."&&&/tmp/rsync.log
done4、测试实时同步&#先打印形式查看脚本执行情况#&bash&-x&inotify_rsync.sh&
+&SRC=/home/rsync/&&&&&&&&#目录结尾一定要加个/,否则会再目标服务器再创建个目录
+DST=rsync@192.168.18.213::home
+&read&files
+&/usr/bin/inotifywait&-mrq&--timefmt&'%y-%m-%d&%H:%M'&--format&'%T&%w%f&%e'&-e&create,delete,move,modify,attrib&/home/loongtao
+&rsync&-avzP&--password-file=/etc/rsyncd.pass&--delete&/home/rsync&rsync@@192.168.18.213::home
sending&incremental&file&list
rsync/test.txt
&&&&&&&&&&&0&100%&&&&0.00kB/s&&&0:00:00&(xfer#1,&to-check=2/11)
sent&349&bytes&&received&32&bytes&&762.00&bytes/sec
total&size&is&9380&&speedup&is&24.62
+&echo&'15-04-24&13:33/home/rsync/test.txt&CREATE&was&rsynced.'
+&read&files
+&rsync&-avzP--password-file=/etc/rsyncd.pass&--delete&/home/rsync&rsync@192.168.18.213::home
sending&incremental&file&list
sent&310&bytes&&received&10&bytes&&640.00&bytes/sec
total&size&is&9380&&speedup&is&29.31
+&echo&'15-04-24&13:33/home/rsync/test.txt&ATTRIB&was&rsynced.'
+&read&files#可以看到以上信息,无任何报错,说明已经推送成功。然后,把脚本放到后台运行:#&chmod&+x&inotify_rsync.sh
# ./inotify_rsync.sh&&#此时当源服务器/home/rsync目录文件有更新,则会同步到目标服务器/home/rsync目录本文出自 “” 博客,请务必保留此出处
了这篇文章
类别:┆阅读(0)┆评论(0)
15:43:36 16:27:16 11:34:06 13:01:31技术交流QQ群:& && && &
现在的位置:
Linux下Rsync+Inotify-tools实现数据实时同步
操作系统:CentOS 5.X
源服务器:192.168.21.129
目标服务器:192.168.21.127,192.168.21.128
目的:把源服务器上/home/目录实时同步到目标服务器的/home/下
具体操作:
第一部分:分别在两台目标服务器<span style="color: #8.21.127,<span style="color: #8.21.128上操作
一、分别在两台在目标服务器安装Rsync服务端
1、关闭SELINUX
vi /etc/selinux/config #编辑防火墙配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存,退出
setenforce 0
2、开启防火墙tcp 873端口(Rsync默认端口)
vi /etc/sysconfig/iptables #编辑防火墙配置文件
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
:wq! #保存,退出
/etc/init.d/iptables restart #最后重启防火墙使配置生效
3、安装Rsync服务端软件
yum install rsync xinetd #安装
vi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsync
disable = no #修改为no
:wq! #保存退出
/etc/init.d/xinetd start #启动(CentOS中是以xinetd来管理Rsync服务的)
4、创建rsyncd.conf配置文件
vi /etc/rsyncd.conf #创建配置文件,添加以下代码
log file = /var/log/rsyncd.log #日志文件位置,启动rsync后自动产生这个文件,无需提前创建
pidfile = /var/run/rsyncd.pid
#pid文件的存放位置
lock file = /var/run/rsync.lock
#支持max connections参数的锁文件
secrets file = /etc/rsync.pass
#用户认证配置文件,里面保存用户名称和密码,后面会创建这个文件
motd file = /etc/rsyncd.Motd
#rsync启动时欢迎信息页面文件位置(文件内容自定义)
[home_] #自定义名称
path = /home// #rsync服务端数据目录路径
comment = home_ #模块名称与[home_]自定义名称相同
uid = root #设置rsync运行权限为root
gid = root #设置rsync运行权限为root
use chroot = no #默认为true,修改为no,增加对目录文件软连接的备份
read only = no
#设置rsync服务端文件为读写权限
list = no #不显示rsync服务端资源列表
max connections = 200 #最大连接数
timeout = 600
#设置超时时间
auth users = home__user #执行数据同步的用户名,可以设置多个,用英文状态下逗号隔开
hosts allow = 192.168.21.129
#允许进行数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
hosts deny = 192.168.21.254 #禁止数据同步的客户端IP地址,可以设置多个,用英文状态下逗号隔开
#保存,退出
5、创建用户认证文件
vi /etc/rsync.pass #配置文件,添加以下内容
home__user:123456
#格式,用户名:密码,可以设置多个,每行一个用户名:密码
#保存,退出
6、设置文件权限
chmod 600 /etc/rsyncd.conf
#设置文件所有者读取、写入权限
chmod 600 /etc/rsync.pass
#设置文件所有者读取、写入权限
7、启动rsync
/etc/init.d/xinetd start
service xinetd stop
service xinetd restart #重新启动
第二部分:在源服务器<span style="color: #8.21.129上操作
一、安装Rsync客户端
1、关闭SELINUX
vi /etc/selinux/config #编辑防火墙配置文件
#SELINUX=enforcing #注释掉
#SELINUXTYPE=targeted #注释掉
SELINUX=disabled #增加
:wq! #保存,退出
setenforce 0 #立即生效
2、开启防火墙tcp 873端口(Rsync默认端口,做为客户端的Rsync可以不用开启873端口)
vi /etc/sysconfig/iptables #编辑防火墙配置文件
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 873 -j ACCEPT
:wq! #保存,退出
/etc/init.d/iptables restart #最后重启防火墙使配置生效
温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
3、安装Rsync客户端软件
whereis rsync
#查看系统是否已安装rsync,出现下面的提示,说明已经安装
rsync: /usr/bin/rsync /usr/share/man/man1/rsync.1.gz
yum install
#只安装xinetd即可,CentOS中是以xinetd来管理rsync服务的
yum install rsync xinetd #如果默认没有rsync,运行此命令进行安装rsync和xinetd
vi /etc/xinetd.d/rsync #编辑配置文件,设置开机启动rsync
disable = no #修改为
/etc/init.d/xinetd start #启动(CentOS中是以xinetd来管理rsync服务的)
4、创建认证密码文件
vi /etc/passwd.txt
#编辑文件,添加以下内容
123456 #密码
:wq! #保存退出
chmod 600 /etc/passwd.txt #设置文件权限,只设置文件所有者具有读取、写入权限即可
5、测试源服务器192.168.21.129到两台目标服务器192.168.21.127,192.168.21.128之间的数据同步
mkdir /home//ceshi #在源服务器上创建测试文件夹,然后在源服务器运行下面2行命令
rsync -avH --port=873 --progress --delete
home__user@192.168.21.127::home_ --password-file=/etc/passwd.txt
rsync -avH --port=873 --progress --delete
home__user@192.168.21.128::home_ --password-file=/etc/passwd.txt
运行完成后,分别在两台目标服务器192.168.21.127,192.168.21.128上查看,在/home/目录下有ceshi文件夹,说明数据同步成功。
二、安装Inotify-tools工具,实时触发rsync进行同步
1、查看服务器内核是否支持inotify
ll /proc/sys/fs/inotify
#列出文件目录,出现下面的内容,说明服务器内核支持inotify
-rw-r--r-- 1 root root 0 Mar
7 02:17 max_queued_events
-rw-r--r-- 1 root root 0 Mar
7 02:17 max_user_instances
-rw-r--r-- 1 root root 0 Mar
7 02:17 max_user_watches
备注:Linux下支持inotify的内核最小为2.6.13,可以输入命令:uname -a查看内核
CentOS 5.X 内核为2.6.18,默认已经支持inotify
2、安装inotify-tools
yum install make
gcc gcc-c++
#安装编译工具
inotify-tools下载地址:/downloads/rvoicilas/inotify-tools/inotify-tools-3.14.tar.gz
上传inotify-tools-3.14.tar.gz到/usr/local/src目录下
cd /usr/local/src
tar zxvf inotify-tools-3.14.tar.gz
cd inotify-tools-3.14 #进入解压目录
./configure --prefix=/usr/local/inotify
make install
3、设置系统环境变量,添加软连接
echo "PATH=/usr/local/inotify/bin:$PATH" &&/etc/profile.d/inotify.sh
source /etc/profile.d/inotify.sh
#使设置立即生效
echo "/usr/local/inotify/lib" &/etc/ld.so.conf.d/inotify.conf
ln -s /usr/local/inotify/include
/usr/include/inotify
4、修改inotify默认参数(inotify默认内核参数值太小)
查看系统默认参数值
sysctl -a | grep max_queued_events
结果是:fs.inotify.max_queued_events = 16384
sysctl -a | grep max_user_watches
结果是:fs.inotify.max_user_watches = 8192
sysctl -a | grep max_user_instances
结果是:fs.inotify.max_user_instances = 128
修改参数:
sysctl -w fs.inotify.max_queued_events=""
sysctl -w fs.inotify.max_user_watches=""
sysctl -w fs.inotify.max_user_instances="65535"
vi /etc/sysctl.conf #添加以下代码
fs.inotify.max_queued_events=
fs.inotify.max_user_watches=
fs.inotify.max_user_instances=65535
:wq! #保存退出
参数说明:
max_queued_events:
inotify队列最大长度,如果值太小,会出现"** Event Queue Overflow **"错误,导致监控文件不准确
max_user_watches:
要同步的文件包含多少目录,可以用:find /home/ -type d | wc -l 统计,必须保证max_user_watches值大于统计结果(这里/home/为同步文件目录)
max_user_instances:
每个用户创建inotify实例最大值
温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接
5、创建脚本,实时触发rsync进行同步
vi /usr/local/inotify/rsync.sh
#编辑,添加以下代码
======================================
srcdir=/home//
dstdir=home_
excludedir=/usr/local/inotify/exclude.list
rsyncuser=home__user
rsyncpassdir=/etc/passwd.txt
dstip="192.168.21.127 192.168.21.128"
for ip in $dstip
rsync -avH --port=873 --progress --delete
--exclude-from=$excludedir
$srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir
/usr/local/inotify/bin/inotifywait -mrq --timefmt '%d/%m/%y %H:%M' --format '%T %w%f%e' -e close_write,modify,delete,create,attrib,move $srcdir |
while read file
for ip in $dstip
rsync -avH --port=873 --progress --delete
--exclude-from=$excludedir
$srcdir $rsyncuser@$ip::$dstdir --password-file=$rsyncpassdir
${file} was rsynced" && /tmp/rsync.log 2&&1
======================================
chmod +x /usr/local/inotify/rsync.sh
#添加脚本执行权限
脚本参数说明:
srcdir=/home//
#源服务器同步目录
dstdir=home_
#目标服务器rsync同步目录模块名称
excludedir=/usr/local/inotify/exclude.list
#不需要同步的目录,如果有多个,每一行写一个目录,使用相对于同步模块的路径;
#例如:不需要同步/home//目录下的a目录和b目录下面的b1目录,exclude.list文件可以这样写
rsyncuser=home__user
#目标服务器rsync同步用户名
rsyncpassdir=/etc/passwd.txt
#目标服务器rsync同步用户的密码在源服务器的存放路径
dstip="192.168.21.127 192.168.21.128"
#目标服务器ip,多个ip用空格分开
/tmp/rsync.log
#脚本运行日志记录
6、设置脚本开机自动执行
vi /etc/rc.d/rc.local
#编辑,在最后添加一行
sh /usr/local/inotify/rsync.sh & #设置开机自动在后台运行脚本
7、测试inotify实时触发rsync同步脚本是否正常运行
在源服务器<span style="color: #8.21.129上创建文件inotify_rsync_ceshi
mkdir /home//inotify_rsync_ceshi
重新启动源服务器:<span style="color: #8.21.129
等系统启动之后,查看两台目标服务器<span style="color: #8.21.127,192.168.21.128的/home/下是否有inotify_rsync_ceshi文件夹
然后再在源服务器<span style="color: #8.21.129创建文件夹inotify_rsync_ceshi_new
mkdir /home//inotify_rsync_ceshi_new
继续查看两台目标服务器192.168.21.127,192.168.21.128的/home/下是否有inotify_rsync_ceshi_new文件夹
如果以上测试都通过,说明inotify实时触发rsync同步脚本运行正常。
至此,Linux下Rsync+Inotify-tools实现数据实时同步完成。
扩展阅读:
============================================
inotify参数
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e create,move,delete,modify,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件
============================================
-v, --verbose 详细模式输出
-q, --quiet 精简输出模式
-c, --checksum 打开校验开关,强制对文件传输进行校验
-a, --archive 归档模式,表示以递归方式传输文件,并保持所有文件属性,等于-rlptgoD
-r, --recursive 对子目录以递归模式处理
-R, --relative 使用相对路径信息
-b, --backup 创建备份,也就是对于目的已经存在有同样的文件名时,将老的文件重新命名为~filename。可以使用--suffix选项来指定不同的备份文件前缀。
--backup-dir 将备份文件(如~filename)存放在在目录下。
-suffix=SUFFIX 定义备份文件前缀
-u, --update 仅仅进行更新,也就是跳过所有已经存在于DST,并且文件时间晚于要备份的文件。(不覆盖更新的文件)
-l, --links 保留软链结
-L, --copy-links 想对待常规文件一样处理软链结
--copy-unsafe-links 仅仅拷贝指向SRC路径目录树以外的链结
--safe-links 忽略指向SRC路径目录树以外的链结
-H, --hard-links 保留硬链结
-p, --perms 保持文件权限
-o, --owner 保持文件属主信息
-g, --group 保持文件属组信息
-D, --devices 保持设备文件信息
-t, --times 保持文件时间信息
-S, --sparse 对稀疏文件进行特殊处理以节省DST的空间
-n, --dry-run现实哪些文件将被传输
-W, --whole-file 拷贝文件,不进行增量检测
-x, --one-file-system 不要跨越文件系统边界
-B, --block-size=SIZE 检验算法使用的块尺寸,默认是700字节
-e, --rsh=COMMAND 指定使用rsh、ssh方式进行数据同步
--rsync-path=PATH 指定远程服务器上的rsync命令所在路径信息
-C, --cvs-exclude 使用和CVS一样的方法自动忽略文件,用来排除那些不希望传输的文件
--existing 仅仅更新那些已经存在于DST的文件,而不备份那些新创建的文件
--delete 删除那些DST中SRC没有的文件
--delete-excluded 同样删除接收端那些被该选项指定排除的文件
--delete-after 传输结束以后再删除
--ignore-errors 及时出现IO错误也进行删除
--max-delete=NUM 最多删除NUM个文件
--partial 保留那些因故没有完全传输的文件,以是加快随后的再次传输
--force 强制删除目录,即使不为空
--numeric-ids 不将数字的用户和组ID匹配为用户名和组名
--timeout=TIME IP超时时间,单位为秒
-I, --ignore-times 不跳过那些有同样的时间和长度的文件
--size-only 当决定是否要备份文件时,仅仅察看文件大小而不考虑文件时间
--modify-window=NUM 决定文件是否时间相同时使用的时间戳窗口,默认为0
-T --temp-dir=DIR 在DIR中创建临时文件
--compare-dest=DIR 同样比较DIR中的文件来决定是否需要备份
-P 等同于 --partial
--progress 显示备份过程
-z, --compress 对备份的文件在传输时进行压缩处理
--exclude=PATTERN 指定排除不需要传输的文件模式
--include=PATTERN 指定不排除而需要传输的文件模式
--exclude-from=FILE 排除FILE中指定模式的文件
--include-from=FILE 不排除FILE指定模式匹配的文件
--version 打印版本信息
--address 绑定到特定的地址
--config=FILE 指定其他的配置文件,不使用默认的rsyncd.conf文件
--port=PORT 指定其他的rsync服务端口
--blocking-io 对远程shell使用阻塞IO
-stats 给出某些文件的传输状态
--progress 在传输时现实传输过程
--log-format=formAT 指定日志文件格式
--password-file=FILE 从FILE中得到密码
--bwlimit=KBPS 限制I/O带宽,KBytes per second
-h, --help 显示帮助信息
============================================
&&&&&>> 本文链接:>> 订阅本站:>> 转载请注明来源: >>
&&系统运维技术交流QQ群:①& ②& ③&
【上篇】【下篇】
您可能还会对这些文章感兴趣!
您必须才能发表留言!
本分类最新文章
日志总数:327篇
评论总数:1030条
分类总数:70个
标签总数:472个
友情链接:34个
网站运行:1952天
最后更新:日
欢迎PR值≥3的IT类技术博客与本站友情链接(申请前请先做好本站链接)
Copyright&
系统运维 All rights reserved
版权声明:本站所有文章均为作者原创内容,如需转载,请注明出处及原文链接今天看啥 热点:
inotify实时同步脚本
inotify.sh
#!/bin/bash
src=/data/www/
/usr/local/bin/inotifywait -mrq --timefmt &#39;%d/%m/%y %H:%M&#39; --format &#39;%T %w%f%e&#39; -e modify,delete,create,attrib $src | &while read file
& & & /usr/bin/rsync -arzuq --delete --progress $src 192.168.136.128::www/
& & & echo & &${file} was rsynced& &&/tmp/rsync.log 2&&1
chmod +x inotify.sh &
./inotify.sh& &&
&//后台运行
暂无相关文章
相关搜索:
相关阅读:
相关频道:
&&&&&&&&&&&&
Linux教程最近更新rsync unison+inotify双向实时同步_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
rsync unison+inotify双向实时同步
上传于||文档简介
&&l&#8203;i&#8203;n&#8203;u&#8203;x&#8203;下&#8203;利&#8203;用&#8203;u&#8203;n&#8203;i&#8203;s&#8203;o&#8203;n&#8203;+&#8203;i&#8203;n&#8203;o&#8203;t&#8203;i&#8203;f&#8203;y&#8203;实&#8203;现&#8203;实&#8203;时&#8203;双&#8203;向&#8203;同&#8203;步&#8203;,&#8203;以&#8203;及&#8203;r&#8203;s&#8203;y&#8203;n&#8203;c&#8203;+&#8203;i&#8203;n&#8203;o&#8203;t&#8203;i&#8203;f&#8203;y&#8203;实&#8203;时&#8203;单&#8203;项&#8203;同&#8203;步&#8203;,&#8203;并&#8203;且&#8203;通&#8203;过&#8203;p&#8203;e&#8203;r&#8203;l&#8203;脚&#8203;本&#8203;控&#8203;制&#8203;多&#8203;线&#8203;程&#8203;传&#8203;输&#8203;。
阅读已结束,如果下载本文需要使用1下载券
想免费下载本文?
定制HR最喜欢的简历
下载文档到电脑,查找使用更方便
还剩11页未读,继续阅读
定制HR最喜欢的简历
你可能喜欢博客访问: 3651417
博文数量: 190
博客积分: 3600
博客等级: 中校
技术积分: 9320
注册时间:
专注系统运维、网络架构,研究技术解决方案,记录我的思想轨迹、工作学习、生活和关注的领域
APP发帖 享双倍积分
IT168企业级官微
微信号:IT168qiye
系统架构师大会
微信号:SACC2013
分类: 系统运维
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& Rsync结合Inotify 实时同步
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& ——志在千里
今天一位CU的友友根据之前介绍过 & 配置分发系统,但是由于认证繁琐,很容易出错,我今天重新整理了下,用rsync密码文件pas认证的方式进行同步。
系统环境:
&&&&&&&&&&&&&&&&&& 10.10.10.20& (发布文件服务器)& 源目录:/home/httpd/20dir
&&&&&&&&&&&&&&&&&&
&&&&&&&&&&&&&&&&&& 10.10.10.21&& (同步镜像文件服务器)&&&&&&&&&&&&&&&&&& 目标目录:/home/httpd/21dir
实现目标:目录/home/httpd/20dir 通过Rysnc实时同步到/home/httpd/21dir目录
rysnc的主页地址为:
目前最新版本为Rsync version 3.0.9。
一、配置Rysnc服务 ,实现文件密码文件认证传输。
首先在10.10.10.21上搭建rsync服务,设置同步的目录
1、在10.10.10.21上下载、安装rsync:
#tar zxvf rsync-3.0.9.tar.gz
#cd rsync-3.0.9
#./configure --prefix=/usr/local/rsync
#make install&
2、配置rsync
server服务:
#vim /etc/rsyncd.conf
root&&&&&&&&&&&&&&&&&&&&&&&&&&&& //运行RSYNC守护进程的用户
root&&&&&&&&&&&&&&&&&&&&&&&&&&&& //运行RSYNC守护进程的组
chroot = no&&&&&&&&&&&&&&&&& //不使用chroot
connections=0&&&&&&&&& // 最大连接数无限制
file=/var/log/rsyncd.log&&&&&&&&&&&&&& //日志记录文件的存放位置
file=/var/run/rsyncd.pid&&&&&&&&&&&&& //锁文件的存放位置
file=/var/run/rsyncd.lock&&&&&&&&&& //pid文件的存放位置
[21dir]&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //这里是认证的模块名,在client端需要指定
path = /home/httpd/21dir/&
//需要做镜像的目录,不可缺少
rsync from 10.10.10.20
= no&&&&&&&&&&&&&&&&&&&&&&&&&&&&& // 非只读
list = on&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&& //不允许列文件
users = rsyncuser&&&&&&&&&&&& //认证的用户名,如果没有这行则表明是匿名,此用户与系统无关
secrets file = /etc/21.pas&&&&&&&& &&&&&&&& //密码和用户名对比表,密码文件自己生成
&&&&&&&& 3、设置密码文件secrets
file ,编辑/etc/21.pas
&&&&&&&& #vim &/etc/21.pas
&&&&&&&& rsyncuser:123456&& //用户名和密码,用”/” 隔开
并且设置600文件属性:
#chomd 600 /etc/21.pas
4、启动Rsync服务:
&&&&&&&& #/usr/local/rsync/bin/rsync
--port=873 --address=10.10.10.21 –daemon
&&&&&&&& 其次在10.10.10.20分发服务器上测试同步:
1、添加密码文件认证:
#vim /etc/21.pas
123456&& //对应10.10.10.21 密码即可
&&&&&&&& 并且设置600文件属性:
&&&&&&&& #chomd
600 /etc/21.pas
/usr/bin/rsync -avH --delete& --progress --password-file=/etc/21.pas &/home/httpd/21dir rsyncuser @10.10.10.21::21dir
二、安装配置inotify 服务
在10.10.10.20 上搭建inotify 服务
1、下载安装
# wget http://nchc.dl.sourceforge.net/project/inotify-tools/inotify-tools/3.13/inotify-tools-3.13.tar.gz
# tar xzvf inotify-tools-3.14.tar.gz
# cd inotify-tools-3.13
# ./configure& --prefix=/usr/local/inotify
# make install
2、创建inotify_rsync.sh脚本
# vim inotify_rsync.sh
#function:rysnc
10.10.10.20 &to &10.10.10.21
/etc/21.pas ];then
&&&&&&& echo "123456">/etc/21.pas
&&&&&&& /bin/chmod 600 /etc/1.pas
log=/usr/local/inotify/logs/rsync.log
src="/home/httpd/20dir/"
host="10.10.10.21"
module="21dir"
/usr/local/inotify/bin/inotifywait
-mr --timefmt '%d/%m/%y %H:%M' --format '%T %w %f' -e
close_write,modify,delete,create,attrib $src |& while read DATE TIME DIR FILE; do
&&&&&& FILECHANGE=${DIR}${FILE}
&&&&&& /usr/bin/rsync -avH --delete& --progress --password-file=/etc/21.pas
$src& --exclude-from="/usr/local/inotify/logs/rules.txt" rsyncuser@$host::$module
&&&&&& echo "At ${TIME} on ${DATE}, file
$FILECHANGE was backed up via rsync" >> $log
相关注解如下:
/usr/local/bin/inotifywait -mrq -e
modify,delete,create,attrib ${src}
-m 是保持一直监听
-r 是递归查看目录
-q 是打印出事件
-e close_write,modify,delete,create,attrib 是指 “监听 创建 移动 删除 写入 权限” 事件
/usr/bin/rsync -avH --delete& --progress
--password-file
-a 存档模式
-H 保存硬连接
-delete 删除于多余文件
--password-file 密码文件
今天参数可以man rsync
要排除同步某个目录时,为rsync添加--exculde=PATTERN参数,注意,路径是相对路径,具体查看man rsync。
要排除某个目录的事件监听的处理时,为inotifywait添加--exclude或--excludei参数,具体查看man inotifywait。
--exclude-from="/usr/local/inotify/logs/rules.txt" 可以匹配过滤文件:
如排除包括 .svn的文件:
#cat /usr/local/inotify/logs/rules.txt
inotifywait 命令产生三个返回值,分别是“日期,时间,文件” 这3个返回值会做为参数传给read,因此脚本中的“while read D E F” 写法细化了返回值。
赋予脚本可执行权限
#chmod +x&& inotify_rsync.sh
#./ inotify_rsync.sh &
阅读(24074) | 评论(1) | 转发(11) |
相关热门文章
给主人留下些什么吧!~~
谢谢分享!不过楼主的文章好几处都有错误!不够用心发文哦!!*&list&=&no&&而不是&&list&=&on*&/bin/chmod&600&/etc/21.pas&&而不是&/bin/chmod&600&/etc/1.pas
请登录后评论。

我要回帖

更多关于 视频脚本怎么写 的文章

 

随机推荐