Answers:
crontab不好,因为它每x秒/分钟执行一次,所以如果我什么都不做,它将仍然调用rsync,但是如果我修改了文件,则不会
rsync
将仅同步已更改的文件。如果没有任何变化,它将退出。这确实是最小的开销。
如果您对此不满意,可以使用inotifywait
:
while inotifywait -r /directory/*; do
rsync -avz /directory /target
done
那将是更即时的,但是每次保存时它都会做事。
inotifywait
解决方案有一个轻微但重要的缺点:它无法检测rsync
运行时发生的更改。请考虑以下情况:文件A被更改;文件A被更改。rsync被触发;当rsync 几乎完成同步文件A时,文件B被更改。现在,已rsync
完成并inotifywait
正在运行,但是文件B 未同步,只有在进行下一次更改后才会同步。考虑使用lsyncd
@Arigion建议的方法。
您可以使用Lsyncd(实时同步守护程序):
Lsyncd监视本地目录树事件监视器界面(intify或fsevents)。它会汇总并合并事件几秒钟,然后生成一个(或多个)进程来同步更改。默认情况下,这是rsync。因此,Lsyncd是一种轻量级的实时镜像解决方案,相对易于安装,不需要新的文件系统或块设备,并且不会影响本地文件系统的性能。
例如,这是Ubuntu 16.04的教程。
您可以使用inotifywait
和rsync
。启用inotifywait
事件modify,create,delete
。这样,您仅在文件更改时才与服务器同步,否则它将在读取文件时同步(编辑器会多次读取文件以检查是否有任何更改)。这样说:
while inotifywait -r -e modify,create,delete /directory; do
rsync -avz /directory /target
done
lsyncd
@Arigion建议的方法。