BLOGTIMES
2007/01/04

suexec_logをcronologでローテートする

  httpd 
このエントリーをはてなブックマークに追加

普段、apacheは全てcronologで自動的にローテートされるようにしているのですが、ひとつだけcronologを使うことができないファイルがあってちょっと気になっていました。その曲者はsuexec_log

suExecを有効にしたときにオプションで出力することができるログなんですが、Apacheの通常のログと違ってディレクティブで指定するのではなく、./configure時にオプションによってファイル名を指定する形式になっています。このため、出力を直接cronologに渡すことができません。

suEXEC サポート - Apache HTTP サーバ

--with-suexec-logfile=FILE
suEXEC の処理とエラーが記録されるファイル名を指定します。 (監査やデバッグ目的に有用) デフォルトではログファイルは suexec_log という名前で、 標準のログファイルディレクトリ (--logfiledir) に置かれます。

このような仕様のため、ローテートは自作のスクリプトでやっていました。ところが、Apacheのログをmultilogに取らせるというエントリにあるrdfifoと名前つきパイプ*1を使えばsuexec_logをcronologに通すことができることがわかりました。

ITUKI over TCP / TimePlant

rdfifo 1,089バイト 2003.05.20 Version 0.1
UnixでFIFOの内容をSTDOUTに出力する、至って単純なプログラムです。ソース見ると分かりますが、30行ほどです。 多分、バグもないでしょう……(あったりして(^^;) 問答無用でファイルにデータを吐き出すプログラムもこれを使えば標準出力に出力することが出来ます。 Apacheのログをdaemontoolsのmultilogで取るときに使ってます。

なるほどね。名前つきパイプを使うという発想は自分にはありませんでした。

欠点としては、パイプを読み出す側を先に起動しておかないとApacheがブロックしてしまうことでしょうか。落ちないようにdaemontoolsで監視するようにしました。

  • *1: named pipe

トラックバックについて
Trackback URL:
お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/1799
Trackbacks
このエントリにトラックバックはありません
Comments
愛のあるツッコミをお気軽にどうぞ。[policy]
古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
コメントはありません
Comments Form

コメントは承認後の表示となります。
OpenIDでログインすると、即時に公開されます。

OpenID を使ってログインすることができます。

Identity URL: Yahoo! JAPAN IDでログイン