如何在文件修改时触发rsync?


18

我可以与同步文件夹rsync -avz /directory /target,现在,如果我更改了文件,则希望这样做,/directory因此rsync应自动调用。

我正在使用Virtual Box,Virtual Box的共享文件夹确实很慢,尤其是当您有一个使用共享文件夹作为文档根目录的网页时。有了rsync我,我就可以使用共享文件夹上的本地文件,并自动将其与文档根目录同步。

我希望有人对此有一个好主意crontab,因为它每x分钟执行一次,所以效果不好,因此,如果我什么都不做,它仍然会调用,rsync但是如果我修改了文件就不会。

最好的祝福

Answers:


18

crontab不好,因为它每x秒/分钟执行一次,所以如果我什么都不做,它将仍然调用rsync,但是如果我修改了文件,则不会

rsync将仅同步已更改的文件。如果没有任何变化,它将退出。这确实是最小的开销。

如果您对此不满意,可以使用inotifywait

while inotifywait -r /directory/*; do
    rsync -avz /directory /target
done

那将是更即时的,但是每次保存时它都会做事。


1
看来问题是inotify无法检查共享的nfs文件夹。为了确保,我想尝试描述我已经安装了带有vagrant的虚拟盒,在那里我有一个共享文件夹“ projects”,它安装在引导程序上,我所有的web服务器文件都位于那里,因此我可以在主机上对其进行修改我告诉过的虚拟主机共享文件夹的system(win7)确实很慢,因此解决方案可能是将已挂载的nfs文件夹同步到另一个位置,例如/ var / www,但常见的方式不起作用,我尝试了fileschanged,icrontab,gues gamin或fam会有所帮助,但我不知道如何启动或使用它们
BlackScorp

@BlackScorp实际上,您只需要固定rsync并让它决定需要同步的内容。正如我在答案中所指出的那样,这不是一个糟糕的选择。
奥利(Oli)

1
另一个选择是从主机推送文件,而不是尝试远程检测更改。
奥利(Oli)

很好,我以前使用过此解决方案,它有2个问题:1)我必须每次都重新连接到我的虚拟盒中才能编辑文件,这意味着我的虚拟机必须运行,快速编辑不再起作用2)我不知道为什么,但是因为我的IDE(Netbeans)samba的项目扫描过程的结果显示99%的CPU使用率,并且在开发过程中虚拟框中的所有内容都很缓慢,我将尝试rsyn + cronjob解决方案或Web服务器中的php构建
BlackScorp

inotifywait解决方案有一个轻微但重要的缺点:它无法检测rsync运行时发生的更改。请考虑以下情况:文件A被更改;文件A被更改。rsync被触发;当rsync 几乎完成同步文件A时,文件B被更改。现在,已rsync完成并inotifywait正在运行,但是文件B 未同步,只有在进行下一次更改后才会同步。考虑使用lsyncd @Arigion建议的方法。
MarSoft

6

您可以使用Lsyncd(实时同步守护程序)

Lsyncd监视本地目录树事件监视器界面(intify或fsevents)。它会汇总并合并事件几秒钟,然后生成一个(或多个)进程来同步更改。默认情况下,这是rsync。因此,Lsyncd是一种轻量级的实时镜像解决方案,相对易于安装,不需要新的文件系统或块设备,并且不会影响本地文件系统的性能。

例如,这是Ubuntu 16.04教程


2

您可以使用inotifywaitrsync。启用inotifywait事件modify,create,delete。这样,您仅在文件更改时才与服务器同步,否则它将在读取文件时同步(编辑器会多次读取文件以检查是否有任何更改)。这样说:

while inotifywait -r -e modify,create,delete /directory; do
    rsync -avz /directory /target
done

这不会检测到rsync运行时发生的更改。考虑使用lsyncd@Arigion建议的方法。
MarSoft

这将在每次更改后在所有文件上重新应用所有事件...并且在应用时在那段时间内不会看到任何更改...
某人

0

在对已接受答案的评论中稍加扩展,我已经成功使用fswatch触发scp了来宾的更改文件。在Linux上,这是一个包装,inotify但它也是跨平台的(我在Mac上具有基于Arm的QEMU guest虚拟机)。我也进行了ssh远程构建。推送方法适用于表现不理想的股票。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.