linux从某个版本开始,支持了inotify,用户可以获得文件系统的的变化事件。
    安装inotify工具包(yum install inotify-tools)后获得两个命令inotifywait,inotifywatch
    inotifywait:监控等待某个或多个具体事件
    inotifywatch:统计数据

    本次实现在两个服务器A和B之间文件目录的定时对特定目录做同步,实现一个简单版本:
    A服务器有一个需要同步的目录,因为用户在不停使用,会发生很多改动。
    B服务器为备份服务器,需要定期同步,周期为1分钟。但做全量同步,时间比较长。因此使用inotify,获得变动的文件列表,对变动文件进行同步。
    git仓库的写操作,和inotify事件存在偏差,不完全一致。因此,对整个项目目录进行同步。

    操作逻辑:

    1. 启动inotifywait,把更新事件添加写入文件/var/log/inotify/update-event.log,
    2. 每分钟定期执行,rsync
    3. def sync():
      1. 移动update-event.log为update-event.processing
      2. 判断是否需要执行全量同步,如15分钟执行一次全量
      3. 提取.git目录信息,并去重
      4. 对目录进行rsync操作

    问题和方案:
    1)如何保证inotifywait一直运行,被意外终止或者重启后还能继续执行。做成系统服务,保持一直运行。
    2)会不会有多个sync()同时执行。运行前检查。
    3)如果有事件丢失,怎么保证AB是绝对同步的?定期执行全量同步级3.b步