HAYAGUI

FreeBSD 4.8 + logrotate

はじめに

前回、syslog のログローテーションユーティリティとして、newsyslog を説明しましたが、 newsyslog は、syslog専用のログローテーションユーティリティです。 syslog 以外が出力するログのローテーションとして、汎用ログローテーションユーティリティの logrotate を使ってみます。 linux系OSでは、これが標準のログローテーションユーティリティとなっています。

インストール

インストールは、/stand/sysinstall で一発インストールします。バージョンは logrotate-3.5.2 です。

実体のインストール先は、以下のところ。

mico# which logrotate
/usr/local/sbin/logrotate
設定ファイルのサンプルはこちら。
mico# pwd
/usr/local/etc
mico# ls -la log*
-rw-r--r--  1 root  wheel  468 Mar 23 11:41 logrotate.conf.sample

logrotate.d:
total 6
drwxr-xr-x  2 root  wheel  512 Sep 14 21:28 .
drwxr-xr-x  5 root  wheel  512 Sep 14 21:28 ..
-r--r--r--  1 root  wheel  746 Mar 23 11:41 syslog.sample

設定

logrotate の基本設定を記したファイルが logrotate.conf となります。
mico# cp logrotate.conf.sample logrotate.conf
ログをとるシステム毎の設定はこちら。システムとは、syslog や apache となります。 各ファイルには、システムが出力するログファイル毎に設定されています。 logrotate で syslog 管理下のログをローテーションする時は、以下のように有効にします。
mico# cd logrotate.d/
mico# cp syslog.sample syslog
今回は、syslog は newsyslog で行うので、上記設定は行いません。

logrotate.conf の初期設定は以下のようになっています。日本語コメントは、私の説明。

# see "man logrotate" for details
# rotate log files weekly
# ログをとる間隔。その他に daily , monthly などがある。
weekly

# keep 4 weeks worth of backlogs
# 退避したローテーションファイルの保持数。
rotate 4

# send errors to root
# エラー時に報告するユーザ
errors root

# create new (empty) log files after rotating old ones
# ログファイルを新規に作成する。その他に nocreate (作らない)がある。
create

# uncomment this if you want your log files compressed
# ローテーションしたログファイルを gip する。その他に nocompress (圧縮しない)がある。
compress

# RPM packages drop log rotation information into this directory
# 設定ファイルのインクルード。ローテーション管理下に置くファイルなどの設定格納先。
include /usr/local/etc/logrotate.d

# /var/log/lastlog ファイルのローテーション設定
/var/log/lastlog {
    monthly
    rotate 1
}

# system-specific logs may be configured here
今回は実験なので、以下のようにしました。
# /usr/local/etc/logrotate.d 以下にある syslog は対象としない。
#include /usr/local/etc/logrotate.d

# 以下はログしない
#/var/log/lastlog {
#    monthly
#    rotate 1
#}

# /var/log/hoge をローテーション管理下に置く。
# ログファイルが 1KByte だったら、ログをとる間隔(daily , weekly , monthly)より優先してローテーションする。
# ローテーションする回数は一回。
/var/log/hoge {
     size=1k
     rotate 1
}

動かしてみよう

ローテーション管理対象の /var/log/hoge ファイルを作成。messages をもらいます。
mico# pwd
/var/log
mico# ls -la messages
-rw-r--r--  1 root  wheel  38706 Sep 14 22:43 messages
mico# cp messages hoge
動かしてみよう。
mico# /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf
error: error creating state file /var/lib/logrotate.status: No such file or directory
あれ?/var/lib/logrotate.status ファイルが無いって怒っている。前回 logrotate を実行した情報を保存するファイルがないってことね。自動で作ってくれないんだ。
それじゃ、/var/lib ディレクトリを作ります。
尚、touch で logrotate.status を作っちゃうと、今度は以下のようなメッセージが出るみたい。
mico# /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf
error: error reading top line of /var/lib/logrotate.status

今度はうまく行ったみたい。

mico# /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf
mico# cd /var/log
mico# pwd
/var/log
mico# ls -la hoge*
-rw-r--r--  1 root  wheel     0 Sep 14 23:03 hoge
-rw-r--r--  1 root  wheel  4324 Sep 14 22:47 hoge.1.gz
その時の logrotate.status はこんな感じ。
mico# cat /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/hoge" 2003-9-14
再度 hoge を messages から cp してみて、もう一回 logrotate を動かしてみる。 今度は、設定ファイルの通りに以下のように動作しました。
  1. サイズが大きいので、weeklyよりサイズが優先されてローテーションされる。
  2. ローテーションファイルの履歴は1つだけなので、古いローテーションファイルを削除し、ローテーション。
mico# cp messages hoge
mico# /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf
mico# ls -la hoge*
-rw-r--r--  1 root  wheel     0 Sep 14 23:07 hoge
-rw-r--r--  1 root  wheel  4324 Sep 14 23:04 hoge.1.gz
この状態で再度 logrotate すると、空のファイルなので、なにも起こらず。
mico# /usr/local/sbin/logrotate /usr/local/etc/logrotate.conf
mico# ls -la hoge*
-rw-r--r--  1 root  wheel     0 Sep 14 23:08 hoge
-rw-r--r--  1 root  wheel  4324 Sep 14 23:04 hoge.1.gz

戻る



(C)1999 - 2003 Kenji Ito All rights reserved.