【问题标题】:Script to automatically sync on directory/file modification in between Mac OSX machine and Linux machine在 Mac OSX 机器和 Linux 机器之间自动同步目录/文件修改的脚本
【发布时间】:2011-04-23 23:09:59
【问题描述】:

我的 Mac 上有一些源代码,为了测试,我有兴趣将其与包含与生产环境类似的 Web 服务器设置的 VM 同步。因此,我需要能够在每次发生更改时自动将文件复制到 VM。

我知道每当脚本运行时我都可以使用 rsync 手动执行此操作,但我需要某种方式让它在每次修改特定目录或其子目录中的文件时在后台运行。

我知道 Linux 机器上存在 inotifywait 并且可以解决这个问题。我还阅读了有关 FSEvents API 和 kqueue 的信息。但是,这些似乎都无法从命令行访问,我真的不想花很长时间做一些事情来做到这一点......

我想我可以使用 cronjob,但等待看到网站上的更改一分钟是相当长的时间......

有什么想法吗?

【问题讨论】:

    标签: macos bash synchronization rsync


    【解决方案1】:

    我一直都在这样做,在 Windows/Linux/Mac 工作站上进行开发,并将更改保存到远程 Linux 服务器,在那里它们会立即返回到我工作站的浏览器进行测试。你有几个选择:

    1. 您可以在本地挂载远程文件(如通过 sshfs)并直接对其进行更改。即,您的 Mac 认为文件是本地文件,因此您可以使用 GUI 编辑器对其进行编辑,但是当您使用 File->Save 时,它​​实际上会远程保存文件。这样做的主要缺点是在与服务器断开连接时无法工作。

    2. 远程挂载本地文件。这将允许您在断开连接时在本地工作,但在断开连接时不允许测试站点工作——这可能没什么大不了的。如果您在远程服务器上没有正确的工具/访问权限,则此选项可能不可行。

    3. (我的偏好。)使用 NetBeans IDE,它具有非常好的“复制到远程”功能。您在本地维护所有文件的完整副本,并直接对其进行编辑。当您点击文件->保存文件时,NetBeans 会将其保存在本地透明地通过 scp/ftp 将其保存到您的远程服务器。

    【讨论】:

      【解决方案2】:

      如何使用像 gitmercurial 这样的 DVCS,并让本地 repo 运行 post-commit 挂钩来运行 rsync,然后运行测试本身?

      我有点困惑,为什么不能从运行测试的同一脚本中运行 rsync。如果您运行rsync -e ssh,您可以在VM 和Mac 之间设置自动公钥身份验证。在这种情况下,不会有任何关于 rsync 的手册。

      【讨论】:

      • 我不认为他正在像“运行单元测试脚本”那样进行测试——听起来他正在本地编辑源文件,将它们复制到服务器,然后在浏览器上点击刷新查看更改。
      【解决方案3】:

      您也许可以设置一个启动代理来执行您想要的简单设置。请参阅this questionman page for launchd.plist 以获取有关launchd WatchPath 密钥的更多信息。但看起来WatchPath 可能不适用于changes within sub-directories

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-19
        • 2014-08-09
        • 1970-01-01
        • 1970-01-01
        • 2010-09-22
        • 2016-10-07
        • 1970-01-01
        相关资源
        最近更新 更多