今まで知らなかったんですが、centos5とcentos6以降ではログローテーションの方式が違うんですね。ちょっと困ったことがあったのでメモしておきます。
Contents [hide]
ログローテーションって?
多くのプログラムでは起動時の状態やイベントを伝えるためにログを出力します。これは運用に非常に重要な情報なのですが、プログラムによっては膨大な量になりますし、長期間運用すればするほど当然増えてきます。
結果としてログファイルが大きくなると検索性が低下しますし、ちょっと見るのにもメモリを大量に使ったりと問題が起きてきます。
それを解決するための仕組みがログローテーション(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のほうがわかりやすくていいなぁ。。