rsync+inotify文件实时同步

1.安装rsync、inotify

sudo yum install -y epel-release rsync inotify-tools

2.修改配置文件

sudo tee -a /etc/rsyncd.conf <<-'EOF'
# rsync 守护进程的用户
uid = root
# 运行 rsync 守护进程的组
gid = root
# 允许 chroot,提升安全性,客户端连接模块,首先 chroot 到模块 path 参数指定的目录下,chroot 为 yes 时必须使用 root 权限,且不能备份 path 路径外的链接文件
use chroot = yes
# 只读
read only = no
# 只写
write only = no
# 设定白名单,可以指定IP段(192.168.118.1/255.255.255.0),各个Ip段用空格分开
#hosts allow = 192.168.118.1/255.255.255.0
#hosts deny = *
# 允许的客户端最大连接数
max connections = 0
# 欢迎文件的路径,非必须
#motd file = /etc/rsyncd.motd
# pid文件路径
pid file = /var/run/rsyncd.pid
lock file = /var/run/rsyncd.lock
# 记录传输文件日志
transfer logging = yes
# 日志文件格式
log format = %t %a %m %f %b
# 指定日志文件
log file = /var/log/rsync.log
# 剔除某些文件或目录,不同步
# exclude = lost+found/
# 设置超时时间
timeout = 300
# 忽略不可读
ignore nonreadable = yes
# 设置不需要压缩的文件
dont compress   = *.gz *.tgz *.zip *.z *.Z *.rpm *.deb *.bz2
#facility = local3,日志级别为:warning
syslog facility = local3
# 模块,可以配置多个
[update]
# 模块的根目录,同步目录,要注意权限
path = /etc/nginx/conf.d
# 是否允许列出模块内容
list = no
# 忽略错误
ignore errors
# 添加注释
comment = update sync
# 模块验证的用户名称,可使用空格或者逗号隔开多个用户名
auth users = syncup
# 模块验证密码文件 可放在全局配置里

secrets file = /etc/rsyncd.secrets
EOF

3.修改密码文件

sudo tee -a /etc/rsyncd.secrets <<-'EOF'
syncup:123456
EOF

设置密码文件权限600

sudo chmod 600 /etc/rsyncd.secrets

创建客户端密码文件

sudo tee -a /etc/rsyncd.pass <<-'EOF'
123456
EOF

设置权限

sudo chmod 600 /etc/rsyncd.pass

4.启动

sudo systemctl start rsyncd;
sudo systemctl enable rsyncd;

同步命令

sudo touch /etc/nginx/conf.d/test.conf;
sudo rsync -avzP --delete --progress syncup@192.168.118.174::update /etc/nginx/conf.d/ --password-file=/etc/rsyncd.pass

5.实时同步

#创建事件
inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e create
#删除事件
inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e delete
#修改时间
inotifywait -mrq  /data --timefmt "%d-%m-%y %H:%M" --format "%T %w%f 事件信息: %e" -e close_write

实时同步监控脚本

sudo tee -a /etc/init.d/rsync.sh <<-'EOF'
#!/bin/bash

Path=/etc/nginx/conf.d
#互写两台ip
Server=ip
User=syncup
module=update

monitor() {
  sudo /usr/bin/inotifywait -mrq --timefmt "%d-%m-%y %H:%M" --format '%w%f' -e create,close_write,delete,moved_to 1 | while read line; do
    if [ -fline ] ; then
        sudo rsync -avz line --delete{User}@{Server}::{module} --password-file=/etc/rsyncd.pass
    fi
  done
}

monitor $Path;
EOF

添加权限

sudo chmod +x /etc/init.d/rsync.sh

运行监控脚本

nohup sh /etc/init.d/rsync.sh &
THE END
分享
二维码
< <上一篇
下一篇>>
文章目录
关闭