今回はlogrotateコマンドについて説明しようと思います。
logrotateコマンドとは、日々追記・更新されていくログファイルを定期的に圧縮・削除、あるいは別ファイルに保存するために使用するコマンドになります。
例えばサーバーのログを毎日記録していると、ログファイルの容量がどんどん増えていくことになります。
しかし、ハードディスク容量やパーティション容量は有限なので、そのままにしておくといずれ空き容量が無くなって他のファイルを保存することができなくなってしまいます。
そのため、日々更新されているログファイルは定期的に圧縮・削除、別ファイルへの保存等を行う必要が有ります。
logrotateコマンドは指定したログファイルをどのように扱うかを設定することができます。
下記にコマンドの書式及びオプションを示します。
logrotate [オプション] 設定ファイル名
オプション
-d・・・デバッグモードで起動する。
-f・・・強制的にlogrotateを実行する。
-v・・・詳細を表示する。
logrotateコマンドは「/etc/logrotate.conf」ファイルや「etc/logrotate.d」配下の設定ファイルを読み込ませるのですが、その記載してある設定によって処理内容が変わります。
例えば「compress」を記載が有ればログファイルを圧縮し、「daily」と記載が有れば毎日logrotateによる処理を行います。この処理項目をディレクティブと呼びます。
主なディレクティブの一覧を下記に示します。
ディレクティブ一覧
◎compress・・・ローテートした古いログファイルを圧縮する。
◎daily・・・毎日ローテート処理を行う。
◎create [mode owner]・・・ローテート直後に新しいログファイルを同じ名前で作成する。
◎notifempty・・・ログファイルが空の場合、ローテートしない。
◎maxage count・・・count日よりも古いログファイルを削除する。
◎maxsize size・・・指定サイズよりログファイルが大きくなった場合、時間間隔(daily,weekly等)に関係なくローテートする。
◎minsize size・・・指定サイズよりログファイルが大きくなった場合にローテートするが、時間間隔(daily,weekly等)に依存して処理が行われる。
◎missingok・・・ログファイルが無い場合でもエラーを報告しない。
◎rotate count・・・count回数だけログファイルを残す。countが3であれば3世代分のみログファイルを残し、それ以降は削除する。
◎postrotate/endscript・・・postrotateとendscriptの間のスクリプトが、ログファイルがローテートされた後に実行される。
◎prerotate/endscript・・・ログがローテートされる場合に限り、prerotateとendscriptの間のスクリプトがローテート前に実行される。
◎sharedscripts・・・postrotateやprerotateは複数ファイルを指定をする場合は通常だと各ファイルごとに実行されますが、このディレクティブを記載すると、複数ファイルを指定してもスクリプトが1回のみ実行されます。
◎dateext・・・ローテート後のファイル末尾にYYYYMMDDのような日付をつける。
上記のようにいつローテートするのか、圧縮するのか、サイズは指定するのか等、様々な設定項目が有ります。
試しに仮想環境にて「/etc/logrotate.conf」ファイル内容を見てみようと思います。
まず下記が「/etc/logrotate.conf」ファイルの内容です。
上記のように「/etc/logrotate.conf」ファイルは何日毎、世代数、圧縮するかしないか等の設定が記載されています。
また、「etc/logrotate.d」配下に設定ファイルを置いておくことで、ログファイル別で個別の設定を行うこともできます。
今回はlogrotateコマンド及びその設定ファイルについて説明させていただきました。
logrotateコマンドは「cron」というスケジューリング機能と合わせて使用されていて、定期的に実行するためには「cron」の設定も欠かせません。
機会が有れば「cron」によるスケジューリング機能についても説明しようと考えています。
参考資料