实验环境

IPSERVER
172.16.0.1inotify rsync
172.16.0.17rsync
--两台机器关闭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 
最后修改:2020 年 12 月 30 日
如果觉得我的文章对你有用,请随意赞赏