debianやubuntuでsyslogを1年分残す

debianubuntuのログの回転周期は4個になっていますので、
流量が多かったりなんかすると4日でログが回転してしまいます。
これはつまり4日前のログしかないという状態です。
私は/var/logのsyslogやmaillogあたりは1年分欲しいなと思いまして、
チューニングすることにしました。
設定を見て行くと、syslogのログはlogrotateで回転するのでなく、

  • /etc/cron.daily/sysklogd
  • /etc/cron.weekly/syslogd

の2つのファイルで回転するというのがわかります。
動作としては、

  • ある程度大きなログファイルは毎日回転したい
  • 大きくなくても週に1回は回転したい

という動作のようです。
 
中を見てみると、
for LOG in `syslogd-listfiles`
という部分があります。
syslogd-listfilesというコマンドは回転する必要があるsyslogの
ファイル一覧を取得するコマンドです。

# syslogd-listfiles --help

Debian GNU/Linux syslogd-listfiles.  Copyright (c) 1997,2001
Martin Schulze.  This is free software; see the GNU General Public Licence
version 2 or later for copying conditions.  There is NO warranty.

Usage: syslogd-listfiles <options>
Options: -f file	specifies another syslog.conf file
         -a | --all	list all files (including news)
         --auth		list all files containing auth.<some prio>
	 --ignore-size  don't rotate files which got too large
         --large nnn	define what is large in bytes (default: 10MB)
         --news		include news logfiles, too
         -w | --weekly	use weekly pattern instead of daily
         -s pattern	skip files matching pattern

こんな感じになっています。
毎日回転する大きさは10MBを超えた場合になっているようです。
ただし、syslogファイルだけは毎日回転する仕様のようです。
私がやりたいことはsyslogファイルは毎日更新して、52個残す。
maillogなどのログは毎週更新して1年分残す。
ただし、あまりに大きくなった場合だけ、1日1回の回転にひっかける。
ということなので、以下のように変えました。

/etc/cron.daily/sysklogd

cd /var/log
for LOG in `syslogd-listfiles --large 100000000`
do
   if [ -s $LOG ]; then
      savelog -g adm -m 640 -u root -c 52 $LOG >/dev/null
   fi
done

/etc/cron.daily/sysklogd

cd /var/log
for LOG in `syslogd-listfiles --weekly`
do
   if [ -s $LOG ]; then
      savelog -g adm -m 640 -u root -c 52 $LOG >/dev/null
   fi
done

syslogだけは毎日回転して、52個まで。
100MB以上のログは毎日回転して、52個まで。
その他のログは毎週回転して、52個まで。
としました。
この設定だとsyslogは1年分残らないですが、
まあいいことにします。