気軽に楽しくプログラムと遊ぶ

自分が興味があってためになるかもって思う情報を提供しています。

logrotateでログをローテ―トする

アプリのlog4jなどでしかログローテートできないと思っていましたが、 linuxのコマンドでlogrotateなるものがあることを知ったので、まとめてみます。

環境

Red Hat 4.4.7-4

設定ファイル構成

├─ logrotate.conf # メインの設定ファイル
├─ logrotate.d # 各サービスごとの設定ファイル
│   ├─ dracut
│   ├─ httpd
│   ├─ tomcat
│   ├─ mysql
│   ├─ syslog
│   ├─ yum

logrotate.d以下に、各サービス毎の設定ファイルを配置するのが一般的

設定例

/var/log/app/*.log {
   copytruncate #ログファイルをコピーし、内容を削除
   rotate 7 #7世代分古いログを残す
   start 1 
   daily # 日次ローテーション
   nomail 
   compress # ローテーションログをgzipで圧縮
   missingok # ログファイルなしでもエラーを出さずに処理続行
   postrotate # ログローテーション後に以下を実行
       /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true # syslog再起動
   endscript
}

ローテートの動作確認

# テスト実行して結果を参照
$ logrotate -dv /etc/logrotate.conf

# 実際の実行
$ /usr/sbin/logrotate /etc/logrotate.conf

# 最終ローテ―ト日時の確認
$ cat /var/lib/logrotate.status
logrotate state -- version 2
"/var/log/yum.log" 2015-1-1
"/var/log/httpd/80-access_log" 2021-1-19
"/var/log/httpd/80-error_log" 2021-1-1

【関連情報】syslog

  • 概要:linux上の動きをログ出力する仕組み。syslogデーモンでログが記録される
  • パス:/var/log
  • デフォルトログ:cron、 messages、maillog、secureなど。
  • 設定ファイル:/etc/syslog.conf