/var/log/test.log { hourly maxsize 1M create 0644 root root rotate 2 }
[Timer] OnCalendar=hourly AccuracySec=1m Persistent=true [Install] WantedBy=timers.target
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|
学習ロードマップ | |||||
---|---|---|---|---|---|
logrotate の設定
以下の検証用のログを使って、logrotate の動作を検証していきます。
設定ファイルの書き方
logrotate の個別設定ファイルは /etc/logrotate.d 配下です。
※全体設定ファイルは /etc/logrotate.conf
/var/log/test.log { hourly maxsize 1 create 0644 root root rotate 2 }
logrotate の設定ファイルの意味は以下のとおりです。
項目 | 説明 |
---|---|
hourly | ローテーションの条件1 (hourly/daily/weekly/monthly/yearly を指定可能) この時間が経過すると、ローテーションする |
maxsize | ローテーションの条件2 (k=キロバイト/M=メガバイト/G=ギガバイト) このファイルサイズを超えると、ローテーションする |
create | ローテーション直後に作成するファイルのパーミッション |
rotate | バックアップを残す世代数 |
logrotate を実行した時、上記いずれかの条件を満たす場合は、ログをローテーションします。
(条件を満たさない場合は、ローテーションしません。)
logrotate を定期実行
logrotate は次の方法で定期的に実行します。(定期的にローテーションの条件を確認)
- RHEL 9 以降:systemd タイマー
- RHEL 8 以前:cron
systemd タイマーで logrotate (RHEL 9 以降)
RHEL 9 以降では systemd タイマー で logrotate を定期的に実行します。
まずは systemd タイマーの設定を行います。
1分ごとに誤差 1 秒の精度で実行するように、OnCalendar と AccuracySec を設定します。
[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 の値を以下のように変更することで、ログのローテーション間隔を指定できます。
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
ローテーションの時刻になると、ログがローテーションされているか確認します。
/var/log/test.log /var/log/test.log-2024111815
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 テストするための方法を紹介します。
手動実行
systemd タイマーや cron の実行が待てない場合、次の方法で直接ローテーションを実行します。
設定ファイルの条件※を満たした場合、ローテーションします。
/var/log/test.log /var/log/test.log.1
現行世代がバックアップ (test.log.1) となり、新規に空のファイル (test.log) が作成されました。
うまくローテーションされない場合
強制ローテーション (fオプション)
条件に関わらず、強制ローテーションしたい場合は、-f オプションを利用します。
/var/log/test.log /var/log/test.log.1 /var/log/test.log.2
次に、設定した世代を超えると、ログが削除されることを確認します。
/var/log/test.log /var/log/test.log.1 /var/log/test.log.2
「rotate 2」の設定により、2世代目のログまでしか残りません。
dry-run (dオプション)
ローテーションせずに、設定ファイルの動作を確認したい場合は dry-run を実行します。
関連情報
学習ロードマップ | |||||
---|---|---|---|---|---|
関連記事:Linux の基本機能 | |||||
---|---|---|---|---|---|
Linux カーネルの機能 | |||
---|---|---|---|
ネットワークのコマンド | |||
---|---|---|---|
関連記事:サーバー | ||||
---|---|---|---|---|