inotify-tools + rsync增量同步文件
利用 inotify-tools 实时监控文件变化,再配合 rsync 做目录/文件的实时同步,常用于多机文件同步、热备份、甚至网站内容分发。
实现思路
inotify-tools 提供命令行工具
inotifywait、inotifywatch:inotifywait:实时监听文件事件,阻塞输出。inotifywatch:统计事件次数。
核心逻辑
- 在源服务器上用
inotifywait -mrq监听目录。 - 当有新增/修改/删除事件时,触发
rsync将变化同步到目标服务器。 rsync建议配合-az --delete --exclude参数,支持压缩、增量和删除同步。
- 在源服务器上用
常见使用场景
- Web 服务器多机内容一致性(例如上传的图片、静态资源)。
- 应用日志/数据文件实时同步到备份机。
- 简单的分布式文件推送。
示例脚本
假设要把 /data/www/ 目录同步到 10.0.0.2:/data/www/
1 |
|
优化点
- 排除文件:用
--exclude排除.git/、缓存目录等没必要同步的内容。 - 性能:大量小文件变动时,可以在
while read里加上sleep 1聚合触发,避免频繁 rsync。 - 安全:目标机器可以配置 rsync + SSH key,避免密码输入。
- 多目标同步:如果要同步多台服务器,可以把
rsync部分改成循环。 - 守护进程:结合
supervisord、systemd或nohup保证脚本后台运行。
流程图
