/tmp/rotate/test.log { hourly maxsize 1M create 0660 root root rotate 2 }
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|
logrotate の設定
以下の検証用のログを使って、logrotate の動作を検証していきます。
設定ファイルの書き方
logrotate の個別設定ファイルは /etc/logrotate.d 配下です。
※全体設定ファイルは /etc/logrotate.conf
/tmp/rotate/test.log { hourly maxsize 1M create 0660 root root rotate 2 }
logrotate の設定ファイルの意味は以下のとおりです。
項目 | 説明 |
---|---|
hourly | ローテーションの条件1 (hourly/daily/weekly/monthly/yearly を指定可能) この時間が経過すると、ローテーションする |
maxsize | ローテーションの条件2 このファイルサイズを超えると、ローテーションする |
create | ローテーションで作成するファイルのパーミッション |
rotate | バックアップを残す世代数 |
logrotate を実行した時、上記いずれかの条件を満たす場合は、ログをローテーションします。
(条件を満たさない場合は、ローテーションしません。)
logrotate を定期実行
logrotate は次の方法で定期的に実行します。(定期的にローテーションの条件を確認)
- RHEL 9 以降:systemd タイマー
- RHEL 8 以前:cron
systemd タイマーで logrotate (RHEL 9 以降)
RHEL 9 以降では systemd タイマー で logrotate を定期的に実行します。
まずは systemd タイマーの設定を行います。
OnCalendar と AccuracySec を次のように、1分ごとに誤差 1 秒の精度に設定します。
[Unit] Description=Daily rotation of log files Documentation=man:logrotate(8) man:logrotate.conf(5) [Timer] OnCalendar=minutely AccuracySec=1s Persistent=true [Install] WantedBy=timers.target
ユニットファイル (設定) の詳細な説明や、systemd については以下の記事をご覧ください。
OnCalendar の値を以下のように変更することで、ログのローテーション間隔を指定できます。
(今回は検証のため、minutely を指定してみます。)
Oncalendar の値 | 意味 |
---|---|
[曜日 年-月-日 時:分:秒] | 例:Wed *-*-* 22:00:00 は、全ての年月日の水曜 22 時を表す 書式の詳細はこちら |
minutely | 毎分 |
hourly | 毎時間 |
daily | 毎日 |
monthly | 毎月 |
yearly | 毎年 |
これまでに設定した内容を systemd に反映させます。
設定ファイルのタイマーが設定されているか確認します。
NEXT LEFT LAST PASSED UNIT ACTIVATES Tue 2024-11-12 05:22:00 UTC 16s left Tue 2024-11-12 05:21:39 UTC 3s ago logrotate.timer logrotate.service
次のローテーションの時間などが正しく設定できているか確認できます。
cron で logrotate (RHEL 8 以前)
RHEL 8 以前では、cron で logrotate を毎日実行します。
今回は logrotate の実行 (ローテーションの条件確認) 頻度を毎日から毎時に変更します。
/etc/cron.daily/ から /etc/cron.hourly/ に logrotate を移動して、cron の頻度を変更します。
1 時間後にログがローテーションされていることを確認します。
test.log test.log-2024111010 test.log-2024111011
logrotate のテスト
systemd タイマーや cron の実行を待てない。今すぐテストしたい!と思うかもしません。
ここでは、logrotate テストするための方法を紹介します。
dry-run (dオプション)
dry-run を実行し、設定ファイルの確認や実行結果を確認できます。
(dry-run なので、実際にはローテーションしません。)
手動実行 (強制ローテーション)
実際にローテーションしたい場合は、以下のコマンドで強制ローテーションします。
test.log test.log.1
現行世代がバックアップ (test.log.1) となり、新規に空のファイル (test.log) が作成されました。
次に、設定した世代を超えると、ログが削除されることを確認します。
/tmp/rotate/test.log /tmp/rotate/test.log.1 /tmp/rotate/test.log.2
合計三回ローテーションをしましたが、「rotate 2」の設定により、3世代目は削除されています。
(現行ログ、1世代目、2世代目のログのみ残っています)
関連情報
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|