0

2 つのサーバー serv1 と serv2 があり、これら 2 つのサーバーのイメージを比較して、欠落しているファイルや変更されているファイルを検出する必要があります。

これまでのところ、3 つのオプションがあります。

- PHP を使用して API を作成する

  • serv1/www/app/images/ 内のすべての画像を返す API ファイルを作成しました
  • 各画像の変更時刻を取得する
  • 結果をjsonとして返す
  • 出力は次のようなものです: { 'path/to/file' : 123232433422 }
  • 私はそれをserv2でフェッチし、デコードしてから配列をserv2/www/app/imagesの画像にマージします
  • array_diff を取得し、正常に動作します

短所: - 多くの時間がかかります (フェッチ、デコード、マージ、ループ、比較...)

-rsyncを使用

  • 予行演習を実行して、serv1 に存在するが、serv2 で欠落または変更されているイメージのリストを取得します (非常に高速です:))

短所:

  • ~/.ssh/ へのアクセスが許可されていないため、Apache は ssh を実行できません
  • Apacheに許可を与える必要がありますが、クライアントはそれを望んでいません
  • つまり、許可が必要なものは使用できません

-ライブラリやベンダーを使用できるかもしれませんが、クライアントが許可してくれるとは思えません。シェルスクリプトやPHPの組み込み関数であれば、可能な限りそうします。

私の質問は、認証を必要とせずに画像とそれらの画像の変更日を取得する別の方法があるかどうかです。私の最初の解決策は、配列が大きすぎる場合に最適化できれば問題ありません。多くの時間がかかります。

PHPまたはシェルスクリプトで解決できることを願っています。

より多くのオプションを教えてください。ありがとう

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次に、ファイルを 2 番目のサーバーにコピーmd5deepし、ネガティブ マッチング モードで実行します。

md5deep -l -r -X server1.txt mydir

これにより、最初のサーバーとは異なる2番目のサーバー上のすべてのファイルのチェックサムと名前が出力されます。

md5deep -l -r dirまたは、 diff または同様のユーティリティを使用して、自分で作成したテキスト ファイルを比較することもできます。

md5deep -l -r mydir | gzip > md5deep.txt.gz最後の注意 -ファイルリストを各サーバーのチェックサムと比較する準備ができているように、各サーバーの cron で単純に実行する方が簡単な場合があります (gzip で圧縮されているため、取得が高速です)。

于 2013-08-08T06:21:02.890 に答える