实验环境
IP | SERVER |
---|
172.16.0.1 | inotify rsync |
172.16.0.17 | rsync |
--两台机器关闭selinux和防火墙
setenforce 0
systemctl stop firewalld
配置rsync
--只需要在172.16.0.17上配置
--服务端编辑配置文件
vim /etc/rsyncd.conf
uid = user
gid = user
port = 873
timeout = 600
list = false
log file = /var/log/rsyncd.log
lock file = /var/run/rsync.lock
pid file=/var/run/rsyncd.pid
[WEB]
comment = WEB
path = /date
read only = false
auth users = user
secrets file = /etc/rsync.passwd
--创建用户
useradd user
--服务端创建rsync登录用户文件
touch /etc/rsyncd.passwd
echo "user:123456" >>/etc/rsyncd.passwd
chmod 600 /etc/rsync.passwd #密码文件权限必须是600
--服务端创建同步文件夹
mkdir /date
chown -R user:user /date
启动rsync
systemctl start rsyncd
inotify介绍
inotify可以监控同步数据服务器目录中信息的变化,采用异步的文件系统事件监控机制,利用事件驱动机制,而无须通过诸如cron等的轮询机制来获取事件,linux内核从2.6.13起支持 inotify,通过inotify可以监控文件系统中添加、删除,修改、移动等各种事件
--安装'inotify'
yum insstall inotify-tools -y
--列出下面的文件,说明服务器内核支持'inotify'
[root@linux /]# ll /proc/sys/fs/inotify
总用量 0
-rw-r--r-- 1 root root 0 10月 7 14:16 max_queued_events
-rw-r--r-- 1 root root 0 10月 7 14:16 max_user_instances
-rw-r--r-- 1 root root 0 10月 7 14:16 max_user_watches
命令常用选项
-m, --monitor #始终保持事件监听
-d, --daemon #以守护进程方式执行,和-m相似,配合-o使用
-r, --recursive #递归监控目录数据信息变化
-q, --quiet #输出少量事件信息
--exclude <pattern> #指定排除文件或目录,使用扩展的正则表达式匹配的模式实现
--excludei <pattern> #和exclude相似,不区分大小写
-o, --outfile <file> #打印事件到文件中,相当于标准正确输出
-s, --syslogOutput #发送错误到syslog相当于标准错误输出
--timefmt <fmt> #指定时间输出格式
--timefmt <fmt> #时间格式
%Y 年份信息,包含世纪信息
%y 年份信息,不包括世纪信息
%m 显示月份,范围 01-12
%d 每月的第几天,范围是 01-31
%H 小时信息,使用 24小时制,范围 00-23
%M 分钟,范围 00-59
示例:
--timefmt "%Y-%m-%d %H:%M"
--format <fmt> 指定的输出格式;即实际监控输出内容
-e 指定监听指定的事件,如果省略,表示所有事件都进行监听
modify #修改
create #创建
move #移动
delete #删除
attrib #属性更改
access #已读取访问文件或目录内容
open #打开打开的文件或目录
close #关闭关闭的文件或目录,无论读/写模式如何
监控目录
--使用'inotifywait'命令监控目录
inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html
--在/var/www/html目录创建文件
root@linux:/# mkdir /var/www/html/index
root@linux:/# rm -rf /var/www/html/index
--查看是否监控到了
root@linux:/# inotifywait -mrq -e modify,create,move,attrib,delete /var/www/html
/var/www/html/ CREATE,ISDIR index
/var/www/html/ DELETE,ISDIR index
--生成密码文件
echo "123456">>/etc/rsync.passwd
--编写脚本来实现实时同步
vim /rsync.sh
#!/bin/bash
inotify="inotifywait -mrq -e modify,create,attrib,move,delete /var/www/html/"
rsync="rsync -avz --delete --password-file=/etc/rsync.passwd /var/www/html/ user@172.16.0.17::WEB"
#持续监控过程中一旦读到了目录指定事件的发生,执行do...done里面的操作
$inotify | while read DIRECTORY EVENT FILE
do
$rsync
done
--设置权限
chmod +x rsync.sh
--设置开机自动运行该脚本
echo "/rsync.sh &" >> /etc/rc.d/rc.local