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 を動かしてみる。
今度は、設定ファイルの通りに以下のように動作しました。
- サイズが大きいので、weeklyよりサイズが優先されてローテーションされる。
- ローテーションファイルの履歴は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
戻る
|