2012年8月5日日曜日

任意のタイミングでのログをローテーションする

例えば、メールログを日付が変わる0:00のタイミングでローテートし、日付をつけて保存したい場合などはないでしょうか?自分の場合、そんな時は以下のようにしています。

1.OS標準のログローテートからはずす

  メールログの場合は、/etc/logrotate.d/syslogを修正する
      →/var/log/maillogの記述を削除する

 (修正前)
 /var/log/messages /var/log/maillog /var/log/secure /var/log/spooler /var/log/boot.log /var/log/cron {


 (修正後)
 /var/log/messages /var/log/secure /var/log/spooler /var/log/boot.log /var/log/cron {

2.ログをローテートさせるスクリプトを作成する

 例)maillog-rotate.sh  (コテコテですが)
 <ここから>------------------------------------------------------------------
 #!/bin/bash
 

 PID=`cat /var/run/rsyslogd.pid`
 SRCDIR=/var/log
 DSTDIR=/var/log/postfix
 YESTERDAY=`env TZ=JST+15 date +%Y%m%d`

 # PRE ROTATE
 #
 if [ -r ${SRCDIR}/maillog ]; then
         cp -p ${SRCDIR}/maillog ${SRCDIR}/maillog.1
         cp /dev/null ${SRCDIR}/maillog
 fi

 kill -HUP ${PID}        #RECONFIG SYSLOG PROCCESS
 # POST ROTATE
 #
 mv ${SRCDIR}/maillog.1 ${DSTDIR}/maillog-${YESTERDAY}
 find /var/log/postfix -type f ! -name "*.gz" -and -mtime +7 -exec gzip {} \;

 exit 0

   <ここまで>------------------------------------------------------------------

3.cronを設定する

 0 0 * * * /usr/local/sbin/maillog-rotate.sh



以上を設定すると、こんな感じにログが保存されるようになります。

-rw-r----- 1 root logadmin   8342 Jul 24 23:55 maillog-20120724.gz
-rw-r----- 1 root logadmin   9636 Jul 25 23:59 maillog-20120725.gz
-rw-r----- 1 root logadmin   8049 Jul 26 23:59 maillog-20120726.gz
-rw-r----- 1 root logadmin   8204 Jul 27 23:58 maillog-20120727.gz
-rw-r----- 1 root logadmin  50061 Jul 28 23:54 maillog-20120728
-rw-r----- 1 root logadmin  52978 Jul 29 23:52 maillog-20120729
-rw-r----- 1 root logadmin 105343 Jul 30 23:55 maillog-20120730
-rw-r----- 1 root logadmin  51856 Jul 31 23:52 maillog-20120731
-rw-r----- 1 root logadmin  67329 Aug  1 23:56 maillog-20120801
-rw-r----- 1 root logadmin  73968 Aug  2 23:58 maillog-20120802
-rw-r----- 1 root logadmin  53923 Aug  3 23:53 maillog-20120803
-rw-r----- 1 root logadmin  33898 Aug  4 23:56 maillog-20120804

2 件のコメント:

  1. /usr/sbin/logrotate /etc/logrotate_maillog.conf な感じのを cron に登録しても幸せになれそうな気がしました。dateext もつけたりして。

    返信削除
    返信
    1. コメントありがとうございます!

      このねたは、sysklogdを使っていた時代に良く使っていたものですが、今現在だったらrsyslogを使って日付をつけたりローテーションさせたりした方がコテコテなスクリプトを書くより幸せになれる気がしますw

      削除