設定ファイルを指定して、logrotateを実行する

ログのローテーション処理は重要なのですが、実装が何気に面倒だったりします。


今回はシステム全体のログローテート処理用のものとは別の設定ファイルを用意して、
logrotateを使おうというお話です。


今回の想定を以下にまとめます。
ちなみにOSはCentOSを使っています。

  • ログローテート設定ファイル


viで「/home/myuser/conf/mylog.conf」を設定ファイルとして作成します。


中はこのような設定です。

$ cat /home/myuser/conf/mylog.conf
/home/myuser/work/mylog {
    copytruncate
    daily
    rotate 5
    compress
    missingok
}
  • ログローテートステータスファイル


touchコマンドで「/home/myuser/conf/logrotate.status」を作っておきます

  • ログローテート対象ログファイル


ログローテート対象とするログファイルは「/home/myuser/work/mylog」とします。

設定ファイルのデバッグ


「logrotate」は「-f」でログローテーション用の設定ファイルを指定することが出来ます。


まずは、デバッグモードで設定ファイルを読み込んでみます。
「-v」オプションを付けて、詳細を標準出力に表示させます。

$ /usr/sbin/logrotate -v -d -f /home/myuser/conf/mylog.conf 
reading config file /home/myuser/conf/mylog.conf
reading config info for /home/myuser/work/mylog 

Handling 1 logs

rotating pattern: /home/myuser/work/mylog  forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /home/myuser/work/mylog
  log needs rotating
rotating log /home/myuser/work/mylog, log->rotateCount is 5
renaming /home/myuser/work/mylog.5.gz to /home/myuser/work/mylog.6.gz (rotatecount 5, logstart 1, i 5), 
renaming /home/myuser/work/mylog.4.gz to /home/myuser/work/mylog.5.gz (rotatecount 5, logstart 1, i 4), 
renaming /home/myuser/work/mylog.3.gz to /home/myuser/work/mylog.4.gz (rotatecount 5, logstart 1, i 3), 
renaming /home/myuser/work/mylog.2.gz to /home/myuser/work/mylog.3.gz (rotatecount 5, logstart 1, i 2), 
renaming /home/myuser/work/mylog.1.gz to /home/myuser/work/mylog.2.gz (rotatecount 5, logstart 1, i 1), 
renaming /home/myuser/work/mylog.0.gz to /home/myuser/work/mylog.1.gz (rotatecount 5, logstart 1, i 0), 
copying /home/myuser/work/mylog to /home/myuser/work/mylog.1
truncating /home/myuser/work/mylog
compressing log with: /bin/gzip
removing old log /home/myuser/work/mylog.6.gz

実行


実行結果確認のために「-v」オプションを付けて実行します。
またログローテートステータスファイルを「-s」オプションで指定します。

$ /usr/sbin/logrotate -v -f /home/myuser/conf/mylog.conf -s /home/myuser/conf/logrotate.status
reading config file /home/myuser/conf/mylog.conf
reading config info for /home/myuser/work/mylog 

Handling 1 logs

rotating pattern: /home/myuser/work/mylog  forced from command line (5 rotations)
empty log files are rotated, old logs are removed
considering log /home/myuser/work/mylog
  log needs rotating
rotating log /home/myuser/work/mylog, log->rotateCount is 5
renaming /home/myuser/work/mylog.5.gz to /home/myuser/work/mylog.6.gz (rotatecount 5, logstart 1, i 5), 
old log /home/myuser/work/mylog.5.gz does not exist
renaming /home/myuser/work/mylog.4.gz to /home/myuser/work/mylog.5.gz (rotatecount 5, logstart 1, i 4), 
old log /home/myuser/work/mylog.4.gz does not exist
renaming /home/myuser/work/mylog.3.gz to /home/myuser/work/mylog.4.gz (rotatecount 5, logstart 1, i 3), 
old log /home/myuser/work/mylog.3.gz does not exist
renaming /home/myuser/work/mylog.2.gz to /home/myuser/work/mylog.3.gz (rotatecount 5, logstart 1, i 2), 
old log /home/myuser/work/mylog.2.gz does not exist
renaming /home/myuser/work/mylog.1.gz to /home/myuser/work/mylog.2.gz (rotatecount 5, logstart 1, i 1), 
old log /home/myuser/work/mylog.1.gz does not exist
renaming /home/myuser/work/mylog.0.gz to /home/myuser/work/mylog.1.gz (rotatecount 5, logstart 1, i 0), 
old log /home/myuser/work/mylog.0.gz does not exist
log /home/myuser/work/mylog.6.gz doesn't exist -- won't try to dispose of it
copying /home/myuser/work/mylog to /home/myuser/work/mylog.1
truncating /home/myuser/work/mylog
compressing log with: /bin/gzip


実行結果を見てみます。
ログローテーションされています。

$ ls -la /home/myuser/work/
合計 28
drwxr-xr-x 2 myuser myuser 4096  1月  5 00:13 .
drwx------ 4 myuser myuser 4096  1月  5 00:06 ..
-rw-r--r-- 1 myuser myuser    0  1月  5 00:13 mylog
-rw-r--r-- 1 myuser myuser   32  1月  5 00:13 mylog.1.gz


指定したログローテートステータスファイルも見てみます。
ローテートのステータスが書き込まれています。

$ cat /home/myuser/conf/logrotate.status 
logrotate state -- version 2
"/home/myuser/work/mylog" 2011-1-5


このようにすると、システム全体のログローテーション処理から、
特定の処理を切り出すことが可能かと思います。


今日はこんな所で。