b.l0g.jp     About     Archive     Feed

logrotateのローテート世代数を減らす時の注意

本当は「山に行きました!」というブログを投稿したいところなのだが、さっぱり行ける雰囲気がないので、腹いせに技術系の投稿を続けてる。

logrotateを使ってログのローテートを行っている状況で、ログファイルの総容量が大きくなり、世代数を減らさざるを得ないときのこと。「rotate 世代数」の指定を減らしても、古い世代数は削除されない。

具体的には、以下の例。当初logrotate.confで以下の設定をしていたとする。

  
\# see "man logrotate" for details
  
\# rotate log files daily
  
daily

\# keep 10 days worth of backlogs
  
rotate 10

\# create new (empty) log files after rotating old ones
  
create

\# uncomment this if you want your log files compressed
  
#compress

\# RPM packages drop log rotation information into this directory
  
include /etc/logrotate.d
  

この場合、1日1回ローテートされたファイルが10回分保存される。例えば以下のように。

  
ls -v /var/log/httpd/access_log*
  
access\_log access\_log.4 access_log.8
  
access\_log.1 access\_log.5 access_log.9
  
access\_log.2 access\_log.6 access_log.10
  
access\_log.3 access\_log.7
  

ここで、アクセスログ1ファイルずつの容量が増えてきて、ディスク空き容量が減ってきた場合、保存する世代数を減らして対処する場合、「rotate 世代数」の世代数を減らしても、古い世代が一斉に削除されるわけではない。

rotate 5とした場合、次のローテート後には以下のようになる。

  
access\_log access\_log.4 access_log.9
  
access\_log.1 access\_log.5 access_log.10
  
access\_log.2 access\_log.7
  
access\_log.3 access\_log.8
  

つまり、6世代目が消えるだけで、7世代目以降は自動的には削除されないため、手動で削除する必要がある。

これだけ。これが分からなくて危なくディスク使用率が100%になるところだった。


海外の役立つブログ記事などを人力で翻訳して公開するYakstというプロジェクトをやっています。よろしければそちらもどうぞ!