回答:
私の経験では、logrotateは素晴らしいです。非常に柔軟で、ほとんどのソフトウェアでうまく機能します。
ただし、それにはいくつかの問題があり、cronologは主にWebログローテーション機能であるため、問題のあったlogrotate + apacheの経験を書き留めます。
logrotateがaccess.logの名前をaccess.log.1に変更したとしても、apacheはiノードへの書き込み中にaccess.log.1への書き込みを継続するため、ログを回転する場合、ログが回転されていることをapacheに通知する必要があります。ファイルの名前を変更しても、iノード番号には影響しません。
Debianエッチ(およびおそらく他の多くのディストリビューション)では、Apacheログを回転させるためにlogrotateが使用されています。現在、Apacheにはグレースフルリスタートがあり、既存の接続の処理が終了したらapacheの子プロセスを終了し、Apacheがその構成を再読み取りし、新しい子プロセスを生成して、新しいログファイルへの書き込みを開始します(前のプロセスが回転)。
これは素晴らしい解決策のように思えますが、グレースフルリスタートは特定の条件(高負荷など)で常に機能しないため、debian開発者はapache logrotate構成でグレースフルリスタートの代わりにapacheリスタートを使用することにしました。残念ながら、これによりすべての接続が一度にドロップされます。これは、負荷の高いサイトにとっては非常に悪いことです。さらに、Apacheの再起動は、Apacheの停止や起動などの問題を引き起こす可能性もあります(特定の負荷状況でも)。詳細については、以下のバグリンクを参照してください。
一番下の行は、logrotateは素晴らしいですが、特定のプログラムの特定の問題につながる可能性があります。私はcronologの経験はあまりありませんが、パイプを介してログを書き込むので、ログファイルをローテーションするときにApacheのリロードは必要ありません。これは基本的に上記のすべてを解決します。
関連するlogrotate / apache debianのバグ:
私はcronologを好みますが、それは本当に強い好みではありません。
cronによって開始された場所でlogrotateを実行し、何らかの理由でローテーションが発生したはずのときにシステムがダウンした場合、ログファイルはローテーションされません。
また、ログファイルには長期間保存するため、名前に日付(%Y%m.combined.access.log)が含まれているログファイルが好きです。ほとんどのシステムでは、デフォルトで、apache logrotateはファイルにaccess.log、access.log.1などの名前を付けます。logrotateを使用してログファイルの日付を使用することは可能かもしれませんが、前回見たときの方法を理解できませんでした。
logrotateのみを使用しました。Debianがデフォルトで使用するものであり、私はこれに苦情は一度もありません。
私はほとんど独占的に使用cronolog
しlogrotate
ます。
logrotate
Debianに付属しており、メールサーバーログなどのシステムサービスで動作し続けることができます。しかし、Apacheとlighttpd
ログファイルについては、すべてcronolog
です。
私が使用する理由の1つcronolog
は、すべての構成がWebサーバー構成のログファイル行で行われることです。
たとえば、lighttpd
設定ファイルに次のように入力できます。
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%W-access.log"
そして、他の設定なしで毎週新しいログファイルを取得します。または、創造的になって次のようなことをすることもできます。
accesslog.filename = "|/usr/bin/cronolog --symlink=/var/log/webs/access.log /var/log/webs/%Y/%m/%a-access.log"
また、曜日ごとにトラフィックを示すログファイルを取得します。たとえば、すべての日曜日、すべての火曜日。
さらに良いのは、サーバーが少しの間ダウンしていても、再起動時に正しいログファイルが使用されることです。