Skip to content

rsync + inotify 实时文件同步工具

一条命令完成所有配置,支持本地服务器和备份服务器两种角色。


核心概念(重要!)

┌─────────────────────────────────┐          ┌─────────────────────────────────┐
│       本地服务器(数据源)        │          │       备份服务器(接收端)        │
│                                 │          │                                 │
│  • 监听文件变化                   │          │  • 接收推送的文件                 │
│  • 文件变化后自动推送             │  ──────▶  │  • 提供 rsync 服务               │
│  • 运行【模式1】                  │          │  • 运行【模式2】                  │
│                                 │          │                                 │
│  示例: 192.168.1.10              │          │  示例: 192.168.1.20              │
└─────────────────────────────────┘          └─────────────────────────────────┘

                    数据流向:本地服务器 ──推送──▶ 备份服务器

快速开始

第一步:在备份服务器上运行

sh
# 下载脚本
curl -O https://your-server/rsync-inotify-sync.sh
chmod +x rsync-inotify-sync.sh

# 执行脚本
./rsync-inotify-sync.sh

选择 【模式 2:备份服务器】

第二步:在本地服务器上运行

sh
# 下载脚本
curl -O https://your-server/rsync-inotify-sync.sh
chmod +x rsync-inotify-sync.sh

# 执行脚本
./rsync-inotify-sync.sh

选择 【模式 1:本地服务器】,输入备份服务器显示的连接信息。


配置说明

直接回车 = 使用默认值

每个配置项都有默认值,直接按回车即可使用:

► 备份服务器 IP [192.168.1.100]: █

              直接回车使用这个默认值

配置示例

场景:将 Web 服务器文件实时同步到备份服务器

备份服务器 (192.168.1.20) 配置:

第 1 步:选择部署模式
═══════════════════════════════════════════════════════════════

  【模式 1:本地服务器(数据源)】
  角色说明:这台服务器是数据的【来源】,文件变化后自动推送到备份服务器
  ...

  【模式 2:备份服务器(接收端)】
  角色说明:这台服务器是数据的【目的地】,被动接收其他服务器推送的文件
  ...

► 请选择 [1/2]: 2

[✓] 已选择:备份服务器(接收端)
  → 这台服务器将接收其他服务器推送的文件

第 3 步:配置备份服务器参数
═══════════════════════════════════════════════════════════════

【模块名称】
  说明: 定义一个模块名,本地服务器通过此名称连接
  示例: backup、www、webdata

  注意:模块名不是路径!
  ✓ 正确: backup
  ✗ 错误: /www/backup/

► 模块名称 [backup]: webdata          ← 输入模块名

【文件存储目录】
  说明: 接收本地服务器推送过来的文件的存储目录

► 存储目录 [/data/backup/]:           ← 直接回车使用默认值

【服务端口】
► 服务端口 [873]:                      ← 直接回车使用默认值

【认证用户名】
► 认证用户名 [rsync_backup]:           ← 直接回车使用默认值

【认证密码】
► 认证密码: ******                     ← 输入密码
► 确认密码: ******

【允许连接的 IP】
► 允许的 IP [192.168.0.0/16]: 1.10.10.0/24   ← 输入允许的网段

第 4 步:生成配置文件
[✓] 密码文件: /etc/rsyncd.secrets
[✓] 配置文件: /etc/rsyncd.conf

第 5 步:配置防火墙
   配置 iptables... 完成

第 6 步:启动 rsync 服务
[✓] rsync 服务已启动 (daemon)

═══════════════════════════════════════════════════════════════
  安装完成!
═══════════════════════════════════════════════════════════════

   ✓ 备份服务器接收服务已成功部署

   本地服务器连接信息(配置本地服务器时需要填入)
   ├─ 备份服务器 IP: 192.168.1.20      ← 记住这个!
   ├─ 服务端口    : 873
   ├─ 模块名称    : webdata            ← 记住这个!
   ├─ 认证用户名  : rsync_backup
   └─ 认证密码    : (您刚才设置的密码)

本地服务器 (192.168.1.10) 配置:

第 1 步:选择部署模式
═══════════════════════════════════════════════════════════════

► 请选择 [1/2]: 1

[✓] 已选择:本地服务器(数据源)
  → 这台服务器上的文件变化将自动推送到备份服务器

第 3 步:配置本地服务器参数
═══════════════════════════════════════════════════════════════

【备份服务器 IP 地址】
  说明: 文件要推送到的目标服务器 IP(即运行【模式2】的服务器)

► 备份服务器 IP [192.168.1.100]: 192.168.1.20   ← 输入备份服务器IP

【备份服务器 rsync 端口】
► rsync 端口 [873]:                              ← 直接回车

【备份服务器模块名称】
► 模块名称 [backup]: webdata                     ← 输入模块名

【本地同步目录】
► 本地同步目录 [/data/backup/]: /var/www/html/   ← 输入要同步的目录

【rsync 认证用户名】
► 认证用户名 [rsync_backup]:                     ← 直接回车

【rsync 认证密码】
► 认证密码: ******                               ← 输入备份服务器设置的密码
► 确认密码: ******

【监听事件类型】
► 监听事件 [modify,delete,create,attrib,move]:   ← 直接回车

【rsync 传输参数】
► rsync 参数 [-azP --delete]:                    ← 直接回车

【排除文件/目录】
► 排除规则(直接回车不排除): *.log              ← 排除日志文件

═══════════════════════════════════════════════════════════════
  配置摘要
═══════════════════════════════════════════════════════════════

   备份服务器: 192.168.1.20:873
   模块名称  : webdata
   本地目录  : /var/www/html/
   认证用户  : rsync_backup
   监听事件  : modify,delete,create,attrib,move
   同步参数  : -azP --delete
   排除规则  : *.log

确认以上配置? [Y/n]: y                          ← 确认

═══════════════════════════════════════════════════════════════
  安装完成!
═══════════════════════════════════════════════════════════════

   ✓ 本地服务器同步服务已成功部署

   文件变化将自动推送到备份服务器

常用命令

sh
# 查看服务状态
./rsync-inotify-sync.sh status

# 查看同步日志
./rsync-inotify-sync.sh logs

# 重启服务
./rsync-inotify-sync.sh restart

# 卸载
./rsync-inotify-sync.sh uninstall

常见问题

1. 连接失败

检查以下几点:

  • 备份服务器 rsync 服务是否启动:systemctl status rsyncd
  • 防火墙是否开放 873 端口
  • 模块名是否正确(不是路径)
  • 用户名密码是否一致

2. 模块名称错误

错误:输入了路径如 /www/backup/
正确:输入模块名如 webdata

模块名是在备份服务器的 /etc/rsyncd.conf 中定义的 [模块名]

3. 日志显示 name lookup failed

这个警告不影响同步功能。如果想消除,在备份服务器添加 hosts 映射:

sh
echo "1.10.10.54  local-server" >> /etc/hosts

或在 /etc/rsyncd.conf 全局配置中添加:

reverse lookup = no

然后重启服务:systemctl restart rsyncd

4. 验证同步是否正常

在本地服务器创建测试文件:

sh
echo "test" > /var/www/html/test.txt

在备份服务器检查:

sh
ls -la /data/backup/
# 应该能看到 test.txt

文件位置

文件本地服务器备份服务器
配置文件/opt/rsync-sync/sync.conf/etc/rsyncd.conf
密码文件/etc/rsync.password/etc/rsyncd.secrets
日志文件/opt/rsync-sync/sync.log/var/log/rsyncd.log

注意事项

  1. 需要 root 权限运行
  2. 先配置备份服务器,再配置本地服务器
  3. 模块名不是文件路径
  4. 两边的用户名和密码必须一致
  5. 这是单向同步:本地服务器 → 备份服务器