アプリの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