FreeBSD QandA 405

FreeBSD QandA

Q. /etc/newsyslog.conf を編集して httpd 等のログをローテーションしようと
   しましたが、ローテーション後も名前が変更された古いファイルにログが
   出力されつづけます。

A. 一般的な UNIX では、プロセスがファイルをオープンしているときに
   そのファイルのリネームを行った場合、プロセス側からは引続きリネーム
   後のファイルをオープンしているように動作します。

   newsyslog(8) はログローテーションを行った後に syslogd(8) に HUP
   シグナルを送ることで、ローテーションを行ったことを伝えるように
   なっています。よって、syslogd を利用しているデーモンならば
   ローテーション後に新しいログファイルにログが出力されるはずです。

   もし syslogd を使わず独自でログファイルに記録しているデーモンが
   あるなら、そのデーモンのプロセス ID が書かれているファイル (pid
   ファイル) を /etc/newsyslog.conf に指定することで、そのデーモンに
   HUP シグナルが送られるようになります。

   また、
     - pid ファイルがない
     - HUP シグナルを送ってもログローテーションを認識しない
   というデーモンの場合でも、logger(1) によって syslogd に送るという
   手もありますので、うまく工夫すれば newsyslog で処理することができます。

間違い・追加情報を見付けた場合は、 修正案の投稿のしかた を読んだ上で、
QandA@jp.FreeBSD.org まで お知らせください。