rsync
ファイルを本番環境にプッシュするコマンドを実行すると、常に(常にそうではなく非常にまれです)、同期が完了した後に本番環境でエラーが発生します。
コマンドrsync
は次のとおりです。
rsync -avzO --exclude=*.git --exclude=*.log /var/www/html/ver_1/api [email protected]:/var/www/html/ver_1
私は次のことを確認しました。
- 本番環境とテスト環境の設定(PHPとApache)は互いにミラーリングされています。
- 質問持つ
rsync
ファイルを手動でコピーするとき(使用して)コマンドと連携します。WinSCP) 問題ありません。したがって、コードのバグではありません。 - あるCentOSシステムから別のシステムに同期しています(違いがある場合)。
質問
- この問題の原因は何ですか?
- なぜこのようなことが時々発生するのですか(25番の2/3)
- この問題を解決したり、発生を最小限に抑えるにはどうすればよいですか?
編集する
PHP Fatal error: require_once(): Cannot redeclare class api\lib\classapitools\apitools in /var/www/html/ver_1/api/index.php on line 42
- index.phpファイルをテストから本番にコピーしましたが、変更されませんでした。
- rsyncコマンドを再実行しても問題は解決されませんでした。
- その後、すべてのファイルを手動でコピーしましたが、うまくいきました。アプリ全体をデバッグしましたが、エラーに関する詳細情報を返しませんでした。 (一般的な意味でエラーが発生した理由はわかっていますが、手動で
rsync
同期するまでアプリ全体をFUBARしているようです)。
答え1
-a
rsyncで使用するフラグに問題がある可能性が高いです。これは、-t
ファイル変更時間を保存することを含む他のオプションセットと同じです。
ターゲットコンピュータでアプリケーションを再起動しないため、アプリケーションとこれらのファイルが変更されたかどうかに応じて、そのコンピュータを使用してこれらのファイルの一部または全部を読み直します。
以前のrsyncから送信されたファイル(現在のファイルではない)の-rlpgoD
代わりに使用したいファイルの「間違った」タイムスタンプは、タイムスタンプが異なる場合でも問題を引き起こすべきではありません。内容は同じです。-a
rsync
このオプションを引き続き使用すると、さらに--in-place
問題が発生する可能性があります。