在远程主机上检测文件已同步到它

在远程主机上检测文件已同步到它

我有一个在开发过程中使用的工具,用于将我在笔记本电脑上编写的代码与远程主机上的测试环境同步。这使我能够快速测试更改,而无需 git-commit/push/pull/build 等。它是使用 fswatch 和 rsync 实现的,因此它会自动将我在本地所做的更改流式传输到远程环境。然而,我遇到了一个问题,因为有时我忘记打开这个工具,然后我浪费了比我应该弄清楚为什么我的代码不起作用的时间更多的时间。

  1. 我的远程主机上是否有一种编程方式来检测该情况任何文件最近(例如,在最后一分钟)已被 rsync 到它?
  2. 此外,是否可以说我的工具是进行 rsync 的工具吗?任何其他主机不太可能同步到我的遥控器,因为我拥有它,但越强大越好:)

我的最终目标是在远程主机上创建一个小型守护进程,它会执行一些无害的操作,例如在文件同步工作时更改提示颜色。

答案1

一种解决方案可能是让您的工具在完成​​数据同步后将当前日期/时间回显到远程计算机上的文件。然后在远程计算机上,需要做的就是检查文件以确定上次将数据同步到该文件的时间。

如果您使用的是 Linux,您可以使用内核中内置的 inotify api 检测文件系统更改。使用inotify,您可以检测哪些文件已被写入,并根据发生的任何事件采取行动。 (打开、关闭、读、写、删除、移动等)

答案2

您可以在远程系统上放置一个监视程序(使用 fswatch、inotify、loggingfs 或您喜欢的任何接口)并让它检测对测试目录的写入。这至少会让您知道最近的修改。并非所有这些机制都可以识别哪个进程导致了它们,例如loggingfs可以,但inotify不能。

仍然存在记住打开手表的问题。您可以通过让 start-testing-now 脚本打开手表来使这一点毫无意义,如果手表尚未启动,则首先进行同步。

但在我看来,这种情况下最简单的解决方案是根本不同步。相反,使用 SSHFS 将本地树安装到测试机器。

如何配置与连接计算机的反向 SSH 连接?了解如何启动从远程计算机到本地计算机的 SSH 连接。

答案3

我想出了一个可行的解决方案。解决方案是定期测量文件的大小,如果文件发生更改,则将文件复制到自身。我有一个 bash 脚本来证明这个概念,但需要对其进行扩展以测量整个文件夹和子文件夹,如果文件夹大小已更改,请查找已更改的文件并将这些单独的文件复制到自身中。希望也有一个顶级 .ignore 文件。如果您对此有所改进,请分享。我们需要一个完整的脚本。这是我的简单脚本:

while [ 1 ]; do
    x=$(du -b .)
    sleep 3
    y=$(du -b .)
    if [ ! "$x" = "$y" ]; then
        cp App.js x
        cp x App.js
    fi
done

相关内容