by @sharkattack51

May 14, 2015

logrotate

$ yum install logrotate

logrotateはデーモンではないのでcrondによって実行される。

/etc/cron.daily/logrotateにより メイン設定ファイルの/etc/logrotate.confが読み込まれる。

メイン設定ファイル内のincludeにより 個別設定ファイルの/etc/logrotate.d/以下が読み込まれる。

  • 基本設定ファイル

    $ cat /etc/logrotate.conf
    
  • サービスごとの設定ファイル

    $ cat /etc/logrotate.d/xxxxxxxx
    
    • こちらが優先される

ローテーション確認

$ logrotate -d /etc/logrotate.d/httpd

強制実行

$ logrotate -f /etc/logrotate.d/httpd

実行履歴確認

$ cat /var/lib/logrotate.status

やりたかったこと

httpdのローテーション設定を変更したかった。

  • /etc/logrotate.d/httpd
/var/log/httpd/*log {
	missingok
	notifempty
	sharedscripts
	delaycompress
	postrotate
		/sbin/service httpd reload > /dev/null 2>/dev/null || true
	endscript
}

週ごとのローテーション設定と、世代保存53週(1年)を追加

/var/log/httpd/*log {
	weekly
	rotate 53
	missingok
	notifempty
	sharedscripts
	delaycompress
	postrotate
		/sbin/service httpd reload > /dev/null 2>/dev/null || true
	endscript
}

動作確認

$ logrotate -dv /etc/logrotate.d/httpd
  • vオプションで詳細を表示、個別設定ファイルの場合はメイン設定は使用されない

エラーが出ていた。remove対象のファイルがnot found。ふぁ???

vオプションで詳細をよく確認すると、ファイル名処理を日付ではなく連番のextentionで処理しているっぽい? 現状は/var/log/httpd内には日付ファイル名が存在。

メイン設定ファイル内にdateextという項目を発見。個別設定の方に追加。

/var/log/httpd/*log {
	weekly
	rotate 53
	dateext
	missingok
	notifempty
	sharedscripts
	delaycompress
	postrotate
		/sbin/service httpd reload > /dev/null 2>/dev/null || true
	endscript
}

再確認

$ logrotate -dv /etc/logrotate.d/httpd

いけてるっぽいので実行

$ logrotate -fv /etc/logrotate.d/httpd

ログフォルダ確認

$ ls /var/log/httpd

ちゃんと消えてた。