Rsyncはログファイルを回転させます。

Rsyncはログファイルを回転させます。

現在私には困難な問題がある。これを調べるにはかなり時間がかかります。とにかく、私がすることは次のとおりです。

複数のサーバーからログファイルを収集してrsyncアーカイブします。保持時間属性が重要なので、私が使用しているアーカイブモードを使用してくださいrsync。ただし、場合によってはエラーが発生する可能性があります。

問題は、ログファイルがサーバー上で循環(変更)されることです。

したがって、現在使用されているログには次のように名前が付けられますtest.log(編集されていませんrsync)。ログファイルは、一定期間および/または特定のファイルサイズの後に循環します。test.log名前が変更されることを意味しますtest.log.1。もう一度test.log回転するとtest.log.1名前test.log.2test.log変わりますtest.log.1

test.logただ私が望むたびに行くのにtest.log.2問題ありません。しかし、これは私が変えられないことだ。

そしてこの回転はrsync私が飛行している間何とか(時々)起こります。そのため、rsyncファイルのすべての時間属性を取得し、回転してrsyncログファイルの収集を開始します。しかし、今、私はもはやtest.log.1同じファイルではありません。しかし、rsyncとにかく得ました。結局のところ、rsyncサーバー上のファイルは変更されたため削除できません(rsyncデバッグで見たものです)。この説明が意味があることを願っています。

したがって、小さなプロセスである可能性があります。

  1. rsynctest.log.1時間属性を持つファイルのリストを取得しますtest.log.2
  2. ログが回転しています(test.log.1名前が付けtest.log.2られており、.2現在.3)。
  3. rsync収集開始(test.log.1およびtest.log.2
  4. rsync特定のファイルを削除できません

もしそうなら、これが起こらないようにするオプションはありますか?

ベストアンサー1

この問題は、コピー/アーカイブ段階ではなく循環段階で最もよく解決されます。ファイルにシリアル番号を指定するのではなく、ファイルの日付を記録するようにログローテーションを変更した場合、rsyncアーカイブには正しいジョブ™を実行するためのロジックは必要ありません。

すでに回転に logrotate を使用していると仮定すると、このdateextオプションを使用してこれを実行できます。ただし、アプリケーションが独自の回転を​​管理している場合、構成はより困難になる可能性があります。 log4jがローテーションファイルに日付を追加できることはわかっていますが、これは設定によって公開されない可能性があるため、アプリケーションの変更が必要な場合があります。アプリケーションレベルの回転をオフにしてlogrotateを使用することもできます。

おすすめ記事