FreeBSD QandA 406

FreeBSD QandA

Q. 次のようなスクリプトで routed のログファイルをローテーションしよ
   うとしましたが、ローテーション後も名前が変更された古いファイルに
   ログが出力されつづけます。

       #!/bin/sh
       cd /var/log
       mv routedlog routedlog.0
       cp /dev/null routedlog
       chmod 644 routedlog
       kill -1 routedのPID

A. routed(8) は SIGHUP を受けても (kill -1 をしても)、オープン中のログ
   ファイルを切替えません。このような場合、次のようにいくつかの方法があり
   ます。

   A1. 一旦 routed を殺し、ログファイルをローテーションさせてから再起動し
   ます。これが最も一般的です。

   A2. routed 起動時に logger(1) を経由して syslogd(8) にログを送るように
   して、newsyslog(8) でローテーションさせます。こうすればログファイルの
   管理が楽です。

   A3. ローテーションを次のコマンドで行います。(これは裏技に近いので、う
   まくいくか様子を見た方がいいかも知れません。)

       cp -p routedlog routedlog.0
       cat /dev/null > routedlog

   A4. FreeBSD ユーザたるもの routed のソースを読んで SIGHUP を受けた時に
   ログファイルを切替える動作を加えてしまいましょう。更にこのパッチを公開
   してしまえば、みんなは幸せ、あなたは人気者になれるかも知れません。
   (routedの場合に限らずこのような精神を大切にしましょう。)

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