0

我有 2 台服务器 serv1 和 serv2,需要比较这 2 台服务器中的图像以检测哪些文件丢失或已被修改。

到目前为止,我有 3 个选项:

- 使用 PHP 创建 API

  • 我创建了一个 API 文件,它将返回 serv1/www/app/images/ 中的所有图像
  • 获取每张图片的修改时间
  • 将结果返回为 json
  • 输出是这样的: { 'path/to/file' : 123232433422 }
  • 我在 serv2 中获取它,解码然后将数组合并到 serv2/www/app/images 中的图像
  • 获取array_diff,工作正常

缺点: - 需要很多时间(获取、解码、合并、循环、比较......)

- 使用 rsync

  • 空运行以获取 serv1 中存在但在 serv2 中丢失或修改的图像列表(非常快:))

缺点:

  • apache 无法运行 ssh,因为它无权访问 ~/.ssh/
  • 需要给 apache 权限,但我的客户不想要它
  • 所以简而言之,我不能使用任何需要许可的东西

- 也许我可以使用一些图书馆或供应商,但我怀疑我的客户会允许我。如果它可以是 shell 脚本或 php 内置函数,我会尽可能地这样做。

所以我的问题是,是否有另一种方法可以在不需要身份验证的情况下获取这些图像的图像和修改日期?如果数组太大,我的第一个解决方案可以优化,因为它需要很多时间。

我希望解决方案可以用 PHP 或 Shell 脚本完成。

请帮助给我更多的选择。谢谢

4

1 回答 1

0

在两台服务器上安装实用程序md5deep(或)。sha1deep

在第一台服务器上执行md5deep并将结果保存到文本文件:

user@server1> md5deep -l -r mydir > server1.txt

结果文件如下所示:

e7c3fcf5ad7583012379ec49e9a47b28  .\a\file1.php
2ef76c2ecaefba21b395c6b0c6af7314  .\b\file2.txt
45e19bb4b38d529d6310946966f4df12  .\c\file3.bin
...

然后,将文件复制server1.txt到第二台服务器并md5deep以否定匹配模式运行:

md5deep -l -r -X server1.txt mydir

这将打印第二台服务器上与第一台服务器不同的所有文件的校验和和名称。

md5deep -l -r dir或者,您可以使用 diff 或类似实用程序比较自己创建的文本文件。

最后一点 - 在每台服务器上简单地在 cron 中运行可能会更容易md5deep -l -r mydir | gzip > md5deep.txt.gz,这样您就可以将文件列表与每台服务器上的校验和进行比较(gzip 压缩,因此可以快速获取)。

于 2013-08-08T06:21:02.890 回答