ログローテートがおかしかったのは・・・・

いつのの頃からか、毎週日曜朝に実行されるログローテートで何故かログ(postfix)が切り替わらない、という現象が起きつづけていて、仕方なく日曜日になると、

/etc/init.d/rsyslog restart

と、手動での切り替えをしてたんだけど、やっぱりメンドクサイということで、ログローテートを実行するlogrotateというそのまんまの名前のパッケージの設定を見なおして、それが変な動きをしていないかチェック。


まずは、logrotateを

# logrotate -d /etc/logrotate.conf 2>&1 | lv
reading config file /etc/logrotate.conf
compress_prog is now /bin/bzip2
compress_ext is now .bz2
including /etc/logrotate.d
Ignoring rsyslog~, because of ~ ending
Ignoring rsyslog.dpkg-dist, because of .dpkg-dist ending
Ignoring denyhosts.dpkg-old, because of .dpkg-old ending
reading config file apache2
reading config info for /var/log/apache2/*.log
reading config file apt
reading config info for /var/log/apt/term.log
reading config info for /var/log/apt/history.log
reading config file aptitude
reading config info for /var/log/aptitude
reading config file denyhosts
reading config info for /var/log/denyhosts
reading config file dpkg
reading config info for /var/log/dpkg.log
reading config info for /var/log/alternatives.log
reading config file munin-node
reading config info for /var/log/munin/munin-node.log
reading config file rsyslog
reading config info for /var/log/syslog
 -- 略 --

のように、デバッグモードで実行してみて、挙動をチェックしてみたんだけど、特におかしいところは見当たらない。

logrotateに続けて、"2>&1"としてあるのは、通常標準エラーに出力されてしまうメッセージを、lvコマンドなどで見れるように標準出力に切り替えるためのオマジナイ。

じゃ、実際にログローテートさせてみるとどうなるか、ということで、どのログファイルをいつローテートしたのかを記録している"/var/lib/logrotate/status"を編集。

# cp -p /var/lib/logrotate/status /tmp/
# perl -pi -e 's/(7\-1)[78]/$1/' /var/lib/logrotate/status
# diff -u /tmp/status /var/lib/logrotate/status
--- /tmp/status	2011-07-18 06:25:40.000000000 +0900
+++ /var/lib/logrotate/status	2011-07-18 20:58:03.000000000 +0900
@@ -1,31 +1,31 @@
 logrotate state -- version 2
 "/var/log/syslog" 2011-7-12
 "/var/log/dpkg.log" 2011-7-1
-"/var/log/snort/alert" 2011-7-18
-"/var/log/auth.log" 2011-7-17
+"/var/log/snort/alert" 2011-7-1
+"/var/log/auth.log" 2011-7-1
 "/var/log/snort/portscan.log" 2011-2-1
 "/var/log/apt/term.log" 2011-7-1
 "/var/log/apt/history.log" 2011-7-1
-"/var/log/denyhosts" 2011-7-17
+"/var/log/denyhosts" 2011-7-1
 "/var/log/alternatives.log" 2011-7-1
 "/var/log/debug" 2011-4-25
-"/var/log/mail.log" 2011-7-17
-"/var/log/kern.log" 2011-7-17
+"/var/log/mail.log" 2011-7-1
+"/var/log/kern.log" 2011-7-1
 "/var/log/aptitude" 2011-7-1
-"/var/log/apache2/access.log" 2011-7-17
-"/var/log/daemon.log" 2011-7-17
+"/var/log/apache2/access.log" 2011-7-1
+"/var/log/daemon.log" 2011-7-1
 "/var/log/wtmp" 2011-7-1
-"/var/log/mail.warn" 2011-7-17
+"/var/log/mail.warn" 2011-7-1
 "/var/log/snort/portscan2.log" 2011-2-1
 "/var/log/btmp" 2011-7-1
-"/var/log/samhain/samhain.log" 2011-7-17
+"/var/log/samhain/samhain.log" 2011-7-1
 "/var/log/lpr.log" 2011-2-1
 "/var/log/mail.err" 2011-2-16
 "/var/log/user.log" 2011-6-28
-"/var/log/munin/munin-node.log" 2011-7-18
-"/var/log/mail.info" 2011-7-17
+"/var/log/munin/munin-node.log" 2011-7-1
+"/var/log/mail.info" 2011-7-1
 "/var/log/samhain/samhain-init.log" 2011-2-7
 "/var/log/apache2/other_vhosts_access.log" 2011-2-10
-"/var/log/apache2/error.log" 2011-7-17
+"/var/log/apache2/error.log" 2011-7-1
 "/var/log/cron.log" 2011-2-1
-"/var/log/messages" 2011-7-17
+"/var/log/messages" 2011-7-1

この状態で、logrotateを実行してみたら・・・・。

# logrotate /etc/logrotate.conf
Usage: /etc/init.d/rsyslog {start|stop|rotate|restart|force-reload|status}
invoke-rc.d: initscript rsyslog, action "reload" failed.
error: error running non-shared postrotate script for /var/log/syslog of '/var/log/syslog
'
Usage: /etc/init.d/rsyslog {start|stop|rotate|restart|force-reload|status}
invoke-rc.d: initscript rsyslog, action "reload" failed.

どうやら、/etc/logrotate.conf/etc/logrotate.dの中で、rsyslogdを再起動するところの記述が間違っているらしい。orz

さっそく、"rsyslog"でgrepしてみると、該当するファイルが。

# grep "rsyslog" /etc/logrotate.conf  /etc/logrotate.d/*
/etc/logrotate.d/rsyslog:		invoke-rc.d rsyslog reload > /dev/null
/etc/logrotate.d/rsyslog:		invoke-rc.d rsyslog reload > /dev/null

"/etc/logrotate.d/rsyslog"を修正すればいいようなのでemacsなどのエディタで"reload"となっているところを"restart"に書き換え。

# diff -u /etc/logrotate.d/rsyslog~ /etc/logrotate.d/rsyslog
--- /etc/logrotate.d/rsyslog~	2011-03-17 00:29:09.000000000 +0900
+++ /etc/logrotate.d/rsyslog	2011-07-18 21:13:23.000000000 +0900
@@ -7,7 +7,7 @@
 	delaycompress
 	compress
 	postrotate
-		invoke-rc.d rsyslog reload > /dev/null
+		invoke-rc.d rsyslog restart > /dev/null
 	endscript
 }
@@ -35,7 +35,7 @@
 		/usr/bin/fwanalog -c /etc/fwanalog/fwanalog.opts 2>&1 > /dev/null
 	endscript
 	postrotate
-		invoke-rc.d rsyslog reload > /dev/null
+		invoke-rc.d rsyslog restart > /dev/null
 		/usr/sbin/pflogsumm --smtpd_stats --detail 25 /var/log/mail.log.1 \
 		| /usr/bin/mail -s "Mail Statistics `/bin/hostname`: `LANG=C /bin/date -u \"+%Uth week of %Y\"`" root@downtown.jp
 	endscript

これで、もう一度"/var/lib/logorotate/status"を編集後に、"logrotate /etc/logrotate.conf"を実行して、エラーメッセージが出なければ、終わり。

実際にローテートされたログファイルのタイムスタンプを見ても、正しくローテートされてようなので、これで直ったと思う。

# ls -lt /var/log/mail.log*
-rw-r----- 1 root adm   618 2011-07-18 21:23 /var/log/mail.log
-rw-r----- 1 root adm 18100 2011-07-18 21:04 /var/log/mail.log.1
-rw-r----- 1 root adm 29583 2011-07-18 14:55 /var/log/mail.log.2.bz2
-rw-r----- 1 root adm 39919 2011-07-11 07:05 /var/log/mail.log.3.bz2
-rw-r----- 1 root adm 29896 2011-07-03 11:58 /var/log/mail.log.4.bz2
-rw-r----- 1 root adm 47072 2011-06-26 17:56 /var/log/mail.log.5.bz2
-rw-r----- 1 root adm 48636 2011-06-21 00:00 /var/log/mail.log.6.bz2
-rw-r----- 1 root adm 38441 2011-06-12 15:38 /var/log/mail.log.7.bz2
-rw-r----- 1 root adm 53624 2011-06-06 06:31 /var/log/mail.log.8.bz2
-rw-r----- 1 root adm 42063 2011-05-29 07:02 /var/log/mail.log.9.bz2
-rw-r----- 1 root adm 52675 2011-05-22 07:02 /var/log/mail.log.10.bz2
-rw-r----- 1 root adm 60194 2011-05-15 07:02 /var/log/mail.log.11.bz2
-rw-r----- 1 root adm 47134 2011-05-08 06:46 /var/log/mail.log.12.bz2

トラックバック(0)

コメントする