Recent Posts

Archives

Blog Ranking

Favorite

ExchangeRate

Update: 2012-02-07 21:00
by ロイター
 

Apache

 

logrotateでApacheのログローテート

金曜日, 5 月 29th, 2009

Apacheのログファイルのローテート。
今までは自分でスクリプトを作って、cronに登録してやってました。

こんな感じ。
 —–
 YMD=`env TZ=JST+15 date ‘+%Y%m%d’`
 cp /usr/local/apache2/logs/access_log /usr/local/apache2/logs/access_log_${YMD}.log
 cp /usr/local/apache2/logs/error_log /usr/local/apache2/logs/error_log_${YMD}.log
 cp /dev/null /usr/local/apache2/logs/access_log
 cp /dev/null /usr/local/apache2/logs/error_log
 /usr/local/apache2/bin/apachectl graceful
 —–

あんまりスマートじゃないような気がする。
ということで、logrotateを使うことにしました。

ローテートしたいログの設定ファイルを/etc/logrotate.d/内に作成。
 —–
 /usr/local/apache2/logs/access_log {
  daily
  rotate 30
  dateext
  create 0644 root root

  postrotate
   /usr/local/apache2/bin/apachectl graceful > /dev/null 2>&1
  endscript
 }

 /usr/local/apache2/logs/error_log {
  daily
  rotate 30
  dateext
  create 0644 root root

  postrotate
   /usr/local/apache2/bin/apachectl graceful > /dev/null 2>&1
  endscript
 }
 —–

『daily』は毎日。ここは他に『weekly』『monthly』などもある。
『rotate 30』は30世代分を残す。
『dateext』はローテートされたファイル名に日付をつける。
『create 0644 root root』は新規ログファイルを指定のパーミッション・ユーザ・グループで作成する。
『postrotate~endscript』はローテート後に実行するコマンド。ここではApacheをgracefulします。

最後にlogrotateを手動で実行。

 # /usr/sbin/logrotate /etc/logrotate.d/hogehoge

初回は/var/lib/logrotate.statusにログファイル名と日付が保存されるだけで、ローテートはされない。
 —–
 ”/usr/local/apache2/logs/access_log” 2009-5-29
 ”/usr/local/apache2/logs/error_log” 2009-5-29
 —–

日付の部分を1日前(今回は『daily』なので1日。周期によってここは変える。)に書き換える。

これで完了。
デフォルトだと、AM04:02にローテートされます。

↓役に立ったと思ったら・・・