centos5とcentos6,7のログローテーションの違い

log
zaco muraです。

今まで知らなかったんですが、centos5とcentos6以降ではログローテーションの方式が違うんですね。ちょっと困ったことがあったのでメモしておきます。

ログローテーションって?

多くのプログラムでは起動時の状態やイベントを伝えるためにログを出力します。これは運用に非常に重要な情報なのですが、プログラムによっては膨大な量になりますし、長期間運用すればするほど当然増えてきます。
結果としてログファイルが大きくなると検索性が低下しますし、ちょっと見るのにもメモリを大量に使ったりと問題が起きてきます。
それを解決するための仕組みがログローテーション(log rotation)です。ログを一定の条件で分割、更新していくことで世代管理し、常に適切なサイズを保つための仕組みです。

ログローテーションってどうやって実行されるの?

ログローテーション自体は logrotate というプログラムにより実行されます。簡単に言うとログファイルを番号を付けてmvして規定回数に達したら削除、みたいな動きをします。
で、このlogrotateはそれ自体はデーモン的に常駐するものではなく、誰かから実行してもらう必要があります。CentOSの場合ではcronにより定期実行されています。

何時に実行されるの?

ここが困ったところだったんですが、デフォルトではcentos5と6,7では実行時間が違います。

centos5 : 04:02
centos6以降 : 03:07~03:52 のランダムな時間

ランダムな時間ってなんだよ?と思いますよね。私は思いました。
そもそもそれってどうやってcronに書くのかわからないですよね。

centos6,7でのlogrotateのcron設定ってどうなってるの?

私はcentos5までの知識しかないので、/etc/crontab 辺りを探していたのですが、見つかりませんでした。
ちなみにcentos5の時はこんな感じでした。

1
2
3
4
5
6
7
8
9
10
11
[root@cent5 ~]# cat /etc/crontab
SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
HOME=/
 
# run-parts
01 * * * * root run-parts /etc/cron.hourly
02 4 * * * root run-parts /etc/cron.daily
22 4 * * 0 root run-parts /etc/cron.weekly
42 4 1 * * root run-parts /etc/cron.monthly

わかりやすい。dailyは04:02に実行されるとはっきり書かれています。

でググッてみるとcentos6,7では /etc/anacrontab と言うファイルにlogrotateの設定があるとのこと。
早速見てみました。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@cent6 ~]# cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
 
# See anacron(8) and anacrontab(5) for details.
 
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
START_HOURS_RANGE=3-22
 
#period in days   delay in minutes   job-identifier   command
1       5       cron.daily              nice run-parts /etc/cron.daily
7       25      cron.weekly             nice run-parts /etc/cron.weekly
@monthly 45     cron.monthly            nice run-parts /etc/cron.monthly

centos5の時と全く違います。全然わかりません。

/etc/anacrontabの読み方

調べた結果、上記の例では以下のように読み取れるそうです。

・START_HOURS_RANGEに設定されている3時から22時の間に実行される。
基本的には3時に実行されるが、その時間帯にサーバが落ちていた場合などは
次の時間に実施されるらしい

・cron.dailyの記述(“1 5 cron.daily”の部分)の読み方
“1”は実行する間隔(=つまり毎日実行の意味)、”5″は実行までにwaitする時間(分)。
⇒先程のSTART_HOURS_RANGEと合わせて考えると、3時02分に実行され、
必ず5分待つ(=3:07から実行される)ということになる。
さらに、RANDOM_DELAY分待つので、実際には3:07~3:52の間で実行される。
※開始時間が02分なのは、仕様っぽいです。調べてもわかりませんでした

centos6,7でcentos5と同じように04:02固定で実行するには?

自分は以下の設定でうまくいきました。

1
2
3
[root@cent6 ~]# grep -B 1 cron.daily /etc/anacrontab
#period in days   delay in minutes   job-identifier   command
1       0       cron.daily              nice run-parts /etc/cron.daily

以上、centos6,7のログローテートについて調べた内容でした。
個人的にはcentos5のほうがわかりやすくていいなぁ。。

スポンサーリンク
Sponsords Link

ZacoDesign

スポンサーリンク
Sponsords Link
:)