web-dev-qa-db-ja.com

サービスを中断せずに、WindowsでApacheログをローテーションするにはどうすればよいですか?

Apache2とColdFusionを実行しているWindowsServer 2003(Standard Edition、32ビット)インストールを管理しています。サーバーには100を超える仮想ホストがあり、それぞれにアクセスログとエラーログがあります。私は古典的なLinux logrotateコマンドのアナログ(またはwin32ポート)を探していました。これにより、ログファイルのローテーションが不要になります。 Apacheのロックメカニズムを中断します。

chomp、矛盾する名前のlogrotateなど、私が見つけたすべてのソリューション bashスクリプト、apachelogrot、およびいくつかのPerlログローテーションスクリプト。彼ら全員:

  • apacheを停止します
  • ログを回転させる
  • apacheを起動します

明らかに、これは非常に多くの仮想ホストでは望ましくありません。これは、Apacheを1晩に数百回停止および再起動するためです。

また、Apacheに付属のrotatelogscronologを使用して調査しました。。パイプ出力を使用して、個別の日次/週次/月次ログを作成します。これらのプログラムは、ログをローテーションするためにApacheを再起動する必要はありませんが、ログファイルごとにプロセスのインスタンスを生成するため、数百の追加デーモンが実行され、それぞれが200〜300kのメモリを消費します。

また、cygwinで従来のLinux logrotateコマンドをコンパイルしようとしましたが、うまくいきませんでした。

次に何を試すべきかについて提案がありますか?または、さらに良いことに、クラシックLinuxを入手できた人はいますかlogrotate cygwinまたは他のwin32コンパイラでコンパイルするコマンド?

4
Joe

回避策として、すべての仮想ホストに単一のログを使用するように切り替え、split-logfileまたは同様のものを使用して後処理することができる場合があります(仮想ホストごとに個別のログにそれらを取得するため)。これはApacheのドキュメントで推奨されています ここ 。それがあなたの環境のオプションであるかどうかわからない。

1
Andrew Flanagan