2007-08-20

Ubuntu Server の syslogd オプション (2)

というわけで、一件落着かと思ったらそうでもなかった。

ログファイルってだいたい定期的にローテートするもので、Ubuntu でも logrotate やらを使ってそうするようになっている。syslogd で取っているログの場合は、まず古いログファイルの名前を変更して、次に新しいファイルを作って、最後に syslogd に HUP を送るような感じになる。もちろん新しいファイルのユーザやアクセス権は、logrotate.conf で指定できるようになっている。

syslogd は起動時には root で各ログファイルを開いていて、後で -u オプションで指定されたユーザに set(e)uid するようになっている(と思う)。で、新しいログファイルが root で作られたあとで syslogd に HUP シグナルを送ったとしても、syslog ユーザに書き込めるようなアクセス権が付いてない限り、それ以後のログは記録されなくなってしまうというわけ。

ということで見事に新しいログが取れてなかったわけで、/etc/default/syslogd で「$SYSLOGD=""」となっているのはそういう理由があったようだ。

対処方法としては、$SYSLOGD から 「-u syslog」を取るか、syslogd 経由のログファイルのオーナーとアクセス権をよく検討して、logrotate.conf もそれに合わせて書きかえるというのが考えられる。、面倒なので前者でいくことにして、結局 /etc/decault/syslogd には「$SYSLOGD="-r"」だけということになる。

ということでおしまい……だといいなぁ。


元ページをブックマークしてくれた人がいるみたいなので追記。

このページは Ubuntu 7.04 の時に書いたもので、8.04 の場合は 6 x 3: Ubuntu 8.04 Server の syslogd オプション に書いたように実装に即したコメントになっている。

No comments: