Rsync + inotify 做文件实时同步
此前的文章中,我介绍了 rsync 的工作原理及使用。而在此前的使用中,我是通过命令行的方式执行 rsync 客户端命令来同步数据的,在实际的应用中,更多的是配置定时任务,定时的执行客户端命令去同步数据。
一般而言,rsync 客户端命令大致都是这样:
rsync -avrz /data remote_host::data
意思是把本地 /data 目录推送到远端 rsync 服务的 data 模块对应的 path 目录中。然后,把这条命令添加到定时任务中去,就达到了定时同步的目的了。
虽然这样能实现我们的需求,但是当 /data 目录下有几千、几万、几十万甚至更多文件时,rsync 会遍历 /data 的所有文件,每一个文件都要计算摘要和校验和。这绝对是灾难性的,会损耗服务器的大量资源来处理同步的事情。
那么,我们就想,有没有一种机制,能实现当文件发生改变时才触发同步到远端服务器呢?答案是有的,它就是 inotify。