我们就可以用今天要介绍的组合:inotify + rsync 实时文件同步方案。
1 inotify 是什么?
inotify 是 Linux 内核提供的一种机制,可以监听文件系统的变化,比如文件的创建、修改、删除、移动等操作。我们可以通过工具如 inotifywait 来利用它。
实现思路:通过 inotify 实时监听源目录,当检测到变化时,立即触发一次 rsync 同步操作,极大地提升了效率和数据一致性。
inotify+rsync组合优势:
- 实时响应:监控文件变化,立即触发同步
- 资源占用低:相比定时轮询更省资源
部署简单:无需额外服务进程,脚本即可运行
2 实战部署
上一篇文章已经将rsync部署好了,这次只需要安装inotify和配置就行
在源主机(10.0.0.110)上操作
2.1 安装 inotify-tools
🛠️ 安装方法
根据你的 Linux 发行版选择对应的安装方式:
| 发行版 | 安装命令 | |
|---|---|---|
| Debian/Ubuntu | sudo apt-get install inotify-tools |
1 |
| CentOS/RHEL | yum install inotify-tools -y |
2 |
| 检查是否安装 | inotifywait --help |
3 |
2.2 编写实时同步脚本
我们编写一个脚本 /opt/realtime_rsync.sh,实现文件变更即同步。
#!/bin/bash
# 实时同步脚本:部署在 10.0.0.110 上(源服务器)
SRC="/var/www/html" # 本地源目录,末尾必须加斜杠
DEST="10.0.0.111:/backup/web" # 远程目标地址
LOG="/var/log/realtime_rsync.log" # 日志文件位置
while inotifywait -r -e modify,create,delete,move "$SRC"
do
rsync -azP --delete $EXCLUDE "$SRC" "$DEST" >> "$LOG" 2>&1
echo "[$(date)] 同步完成" >> "$LOG"
# 可选:避免频繁触发同步,稍作延迟
sleep 2
done
| 命令 | 作用 |
|---|---|
| inotifywait -r -e modify,create,delete,move | 递归监听目录及其子目录的修改/创建/删除/移动事件 |
| rsync -azP | 增量归档压缩传输,显示进度 |
| –delete | 删除目标中源目录已删除的文件,实现镜像同步 |
| >> $LOG | 把输出追加到日志文件中便于排查问题 |
2.3 配置SSH 免密登录
为了实现自动同步,建议你在 10.0.0.110 上配置对 10.0.0.111 的 SSH 免密登录
ssh-keygen -t rsa # 一路回车
ssh-copy-id root@10.0.0.111
# 输入密码
# 测试
ssh root@10.0.0.111
2.4 后台运行脚本(推荐)
nohup bash /opt/realtime_rsync.sh &
2.5 测试验证
在源主机上同步目录创建新文件
cd /var/www/html
touch touch test1.txt
检查日志的同步情况
【温馨提示】这个日志一直会生成,建议做个定时任务定时清理。
3 应用场景推荐
- Web 服务器部署代码实时同步
- 图片/视频上传目录备份到云服务器
- 多机共享一个工作目录(只读同步)
- 日志文件收集实时传送到分析服务



