UNIXな生活
更新:2004/9/19  
Linuxな生活  FreeBSDな生活
 Solarisな生活
 JAVAな生活
 Practical use
 掲示版
logrotateによるログローテーション

 ログファイルを放置するとどんどんファイルは肥大化し、いつかはハードディスクの空き容量を使いきってしまいます。これを防ぐためにLinuxではlogrotateと呼ばれるログローテーション機構を利用しています。
 ディストリビュータで配布されているバイナリパッケージから導入したアプリケーションは、既にこのlogrotateの設定がなされている場合がほとんどですが、ローテーション間隔を変更する場合や、自分でソースなどから導入したアプリケーションを利用する場合は設定が必要です。

 logrotateの動きと設定
/var/logの中を覗いて見ましょう。例えば、messagesというログファイルは以下のような物が存在します。
messages
messages.1
messages.2
messages.3
messages.4
 messagesが現在利用しているログファイルで、messages.1が一世代前のファイルです。以降数字が増える毎に世代が古くなります。

 この世代交替(ローテーション)を起動しているのは、cronです。おそらく多くのディストリビューションでは、/etc/cron.dailylogrotateファイルがあり、以下の設定がなされていると思います。
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf
 logrotateは、cronにより定期的に実行され、実行時に/etc/logrotate.confを読み込みます。

/etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
daily  <---ローテーションを行う間隔(dailt,weekly,monthlyで指定)

# keep 4 weeks worth of backlogs
rotate 6  <---ローテーションの世代数を指定

# create new (empty) log files after rotating old ones
create

# uncomment this if you want your log files compressed
#compress  <---圧縮の可否を指定

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d  <---設定ファイルの場所を指定

# no packages own wtmp -- we'll rotate them here
/var/log/wtmp {
    monthly
    create 0664 root utmp
    rotate 1
}
 /etc/logrotate.confには、統一的な設定がされており、「ローテーションを行う間隔」、「世代数」、「圧縮の可否」、「設定ファイルの場所」などが設定されています。

 各ログファイルの設定
 etc/logrotate.d内の各ログファイル用設定ファイルの書式です。
 例)named
/var/log/named.log {
  missingok
  postrotate
    /usr/bin/kill -HUP `cat /var/run/named.pid 2> /dev/null` 2> /dev/null || true
  endscript
}
 この例は、namedのログファイルローテーション用の例です。デーモンとして動く多くは、ログローテーションでファイルが切り替わったときプロセスをリセットしないと、新しいファイルへの書き込みができません。
 ここでは設定していないですが、この他にローテーション間隔を指定することもできます(dailt,weekly,monthlyで指定)。その場合は、logrotate.confで設定されているローテーション間隔の設定よりこちらの設定を優先します。

例)syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
  sharedscripts
  postrotate
     /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
  endscript
}
 この例は、syslogです。syslogでは複数のログファイルを管理しています。その場合は上記のようにまとめて記述することが可能です。


Producted by Tomoya Sakurai