【日本語man】logrotateの全オプション解説

man logrotateのイメージ画像

logrotateの日本語マニュアルがどこを探してもなかったので、作ってみました。

CentOS7 にインストールされているmanを日本語訳して、少し補足説明を加えました。

manは体系的にlogrotateの使い方を学びたい場合には向きませんが、細かいオプションのリファレンスや、詳しい仕様を知るには最適だと思います。

名前

logrotate – システムログをローテーション、圧縮、及びメール送信する

書式

logrotate [-dv] [-f|--force] [-s|--state ステータスファイル] 設定ファイル ..

概要

logrotate は、大量のログファイルを生成するシステムの管理を容易にするために設計されています。ログの自動ローテーション、圧縮、削除、およびメール送信ができます。それぞれのログファイルは、日次、週次、月次、またはサイズが肥大化した場合にローテーションされます。

通常、logrotateは日次のcronジョブとして実行されます。ログローテーションの基準がログのサイズに基づいていて、logrotateを一日に複数回実行したり、fまたは–forceオプションが指定されたりしない限り、1日に複数回ログを変更することはありません。

コマンドラインに、設定ファイルを何個でも指定することができます。後に指定したファイルは、それより前に指定された設定ファイルを上書きします。すなわち、設定ファイルを列挙する順番は重要になります。通常、必要となるすべての設定ファイルをincludeする一つの設定ファイルが用いられます。これを行うためのincludeディレクティブの使用法についての詳細は、下部を参照してください。ディレクトリがコマンドラインで指定された場合、そのディレクトリ内のすべてのファイルが設定ファイルとして使用されます。

コマンドライン引数が指定されていない場合、バージョンと著作権情報を、簡潔な使用法とともに表示します。ログのローテーション中にエラーが発生するとlogrotateはゼロ以外の終了コードを返して終了します。

オプション

-?, –help

ヘルプメッセージを表示します。

-d, –debug

デバッグモードをオンにし、-vを暗黙的に指定します。デバッグモードでは、ログやlogrotateのステータスファイルは変更されません。

-f, –force

ローテーションが必要とされる場合ではないとしても、強制的にログローテーションを実行するように指示します。このオプションは、新しいエントリを設定ファイルに追加したり、古いログファイルを手動で削除したりした後に、新しいファイルが作成され、ロギングが正しく続行されるようにするのに便利です。

-m, –mail コマンド

logrotateに、ログをメール送信する際に使用するコマンドを指定します。このコマンドには、2つの引数が指定されるべきです: 1) メッセージの件名 2) 宛先 コマンドは、標準入力のメッセージを読み取り、それを宛先に送信します。デフォルトのメールコマンドは、 /bin/mail -s です。

-s, –state ステータスファイル

logrotateに代替のステータスファイルを使うように指示します。このオプションは、別々のユーザーが様々なログファイルのセットを持つ場合にlogrotateを実行するのに便利です。デフォルトのステータスファイルは /var/lib/logrotate/logrotate.status です。

–usage

簡潔な使用法を表示します。

+-v, –verbose

詳細表示モードをオンにします。

設定ファイル

logrotateは、コマンドラインで指定された一連の設定ファイルから、処理すべきログファイルに関するすべてを読み込みます。各設定ファイルは、グローバルオプションを設定でき、ローテーションする対象のログファイルを指定できます。(ローカルオプションはグローバルオプションを上書きします。また、後に指定されたオプションはそれ以前のオプションを上書きします。)簡単な設定ファイルの例を以下に示します:

# sample logrotate configuration file
 compress

 /var/log/messages {
     rotate 5
     weekly
     postrotate
         /usr/bin/killall -HUP syslogd
     endscript
 } 

 "/var/log/httpd/access.log" /var/log/httpd/error.log {
     rotate 5
     mail www@my.org
     size 100k
     sharedscripts
     postrotate
         /usr/bin/killall -HUP httpd
     endscript
 }

 /var/log/news/* {
     monthly
     rotate 2
     olddir /var/log/news/old
     missingok
     postrotate
         kill -HUP `cat /var/run/inn.pid`
     endscript
     nocompress
 }

 ~/log/*.log {}

最初の行は、グローバルオプションを指定しています。ログはローテーションされた後に圧縮されます。行中の空白文字を除いた最初の文字が”#”である行はコメントと解釈されます。

次のセクションは、/var/log/messages のログファイルをどう扱うかの設定です。ログは、5回の週次ローテーションを経て削除されます。ログがローテーションされた後(旧バージョンのログが圧縮される前)に、 /sbin/killall -HUP syslogd が実行されます。

その次のセクションは、/var/log/httpd/access.log と /var/log/httpd/error.log に対する設定です。これらは、サイズが100キロバイト以上になったときにローテーションされ、5回のローテーションを経た古いログは、削除されるのではなく、www@my.org へメールされます。

sharedscriptsは、postrotateスクリプトが、それぞれのログファイルがローテーションされた際ではなく、一回だけ(旧バージョンのログが圧縮された後に)実行されることを指定しています。

このセクションの最初に書かれているファイル名を括っているダブルクォーテーションは、空白を含んだファイル名を認識させることができます。logrotateでは、通常のシェルのクォーテーションのルールが適用されます。’、”、\ がサポートされています。

その次のセクションは、/var/log/news 以下のすべてのファイルに対する設定です。各ファイルは、月次でローテーションされます。これは単一のローテーションディレクティブと見なされ、1つ以上のファイルでエラーが発生した場合、ログファイルは圧縮されません。

最後のセクションは、現在のユーザーのホームディレクトリのログファイルをローテーションするのに、チルダが使われています。これは、globライブラリがチルダ拡張をサポートしている場合のみ有効です。

ワイルドカードは、注意して使用してください。* を指定した場合、logrotateは過去にローテーションされたファイルも含めた、すべてのファイルをローテーションします。通常は、olddirディレクティブや、より限定された(*.logのような)ワイルドカードを使用してください。

以下に、logrotateの設定ファイルで使用できるディレクティブの詳細情報を示します。

compress

旧バージョンのログファイルが圧縮されます。デフォルトでは gzip(1) が使用されます。nocompress も参照してください。

compresscmd

ログファイルを圧縮するのに用いるコマンドを指定します。デフォルトは gzip です。compressも参照してください。

uncompresscmd

ログファイルを展開するのに用いるコマンドを指定します。デフォルトは gunzip です。

compressext

圧縮が有効な場合に、圧縮されたログファイルの拡張子を指定します。デフォルトでは、設定された圧縮コマンドに従います。

compressoptions

圧縮プログラムに渡すコマンドラインオプションです。デフォルトの gzip(1) では “-6″(圧縮率優先)が指定されています。デフォルトとは異なる圧縮コマンドを使用する場合、それに合わせて変更する必要があります。

copy

ログファイルのコピーを生成しますが、元のログファイルには一切変更を加えません。

例えば、このオプションは、現在のログファイルのスナップショットを取得する場合や、他のユーティリティがファイルの切り捨てを要求していたり、ファイルの解析をする場合に使われます。

このオプションを指定した場合、元のログファイルが残り続けるので、createオプションは無効になります。

copytruncate

元のログファイルを移動し、オプションで新しいログファイルを作成するのではなく、コピーを作成した後に元のログファイルを空にします。

このオプションは、何らかのプログラムに対し、ログファイルのクローズを要求できないために、前のログファイルに永久に書き込まれてしまう(追記されてしまう)場合に便利です。ファイルのコピーと切り捨ての間に、非常に短い時間差があるので、一部のログデータが失われる可能性があることに注意してください。

このオプションを指定した場合、元のログファイルが残り続けるので、createオプションは無効になります。

create モード 所有者 グループ, create 所有者 グループ

ローテーションが行われた直後すぐに(postrotateスクリプトが実行される前)新しいログファイルを作成します。(ローテーションされた元のファイルと同じ名前で作成されます。)

モードには、ログファイルのモードを8進法で指定します。(chmod(2)と同じように指定します。)所有者には、ファイルの所有者のユーザー名を指定し、グループにはファイルが属するグループを指定します。いずれのログファイルの属性も省略することができます。この場合、新しいファイルの属性は元のログファイルと同じ値を使用します。 このオプションは、nocreateオプションを使用して無効にすることができます。

createolddir モード 所有者 グループ

olddirディレクティブに指定されたディレクトリが存在しなかった場合、新しくディレクトリを作成します。

モードには、ディレクトリのモードを8進法で指定します。(chmod(2)と同じように指定します。)所有者には、ディレクトリの所有者のユーザー名を指定し、グループにはディレクトリが属するグループを指定します。このオプションは、nocreateolddirオプションを使用して無効にすることができます。

daily

ログファイルは毎日ローテーションされます。

dateext

単純に番号を付ける代わりに、旧バージョンのログファイルに、YYYYMMDD のように日付を付加してアーカイブします。この日付については、dateformatdateyesterdayオプションで詳細に設定することができます。

dateformat フォーマット文字列

strftime(3) 関数と同様の表記法を使用して、日付のフォーマットを指定します。%Y,%m,%d,%H,%s が使用できます。デフォルト値は、-%Y%m%d(hourlyオプションを指定した場合を除く)または -%Y%m%d%H です。ログの名前と拡張子を分割する文字もフォーマット文字列の一部であることに注意してください。

また、このフォーマットで生成した日付は、正しくソートされるようにしなければいけないことに注意してください。(2001/12/01 のように、年月日の順番で指定するのは問題ありません。01/12/2002 では問題があります。時系列の前後にかかわらず、先頭にソートされてしまいます。)なぜなら、logrotateはローテーション時にすべてのファイルをソートし、どのファイルが最も古いかを調べて削除するからです。

dateyesterday

dateextで付加される日付に、今日ではなく昨日の日付を使うようにします。これにより、ローテーションされたファイルのタイムスタンプと、ファイル名の日付が一致します。

delaycompress

1つ前のログファイルを圧縮するのを、次回のローテーション時まで遅らせます。このオプションは、compressが指定された場合のみ機能します。

このオプションは、何らかのプログラムに対し、ログファイルのクローズを要求できないために、前のログファイルに書き込まれてしまう(追記されてしまう)場合に便利です。

extension 拡張子

ログのローテーション後も、指定された拡張子が維持されるようにします。

圧縮を使用すると、拡張子の後に圧縮の拡張子(通常は.gz)が続きます。このオプションは、例えば、mylog.foo という名前のログファイルがあり、それを mylog.foo.1.gz ではなく、 mylog.1.foo.gz のようにローテーションしたい場合に使います。

hourly

ログファイルは毎時ローテーションされます。logrotateは通常cron.daily で実行されるように設定されています。そのため、logrotateを毎時実行するように変更しなければならないことに注意してください。

ifempty

notifemptyオプションを上書きして、ログファイルが空の場合でもローテーションします。(デフォルトはifemptyです。)

include ファイルまたはディレクトリ

引数に与えられたファイルを、includeディレクティブがある位置にインラインで展開されているように読み込みます。ディレクトリが指定された場合、ディレクトリ内のほとんどのファイルがアルファベット順に読み込まれます。標準ファイルではないファイル(ディレクトリや名前付きパイプ)と、tabooextディレクティブで指定された名前で終わるファイルのみ除外されます。

mail メールアドレス

ログがローテーションによって存在期間を超えた場合に、指定したメールアドレスに送信されます。ある特定のログが送信されるべきでない場合は、nomailディレクティブが使えるでしょう。

mailfirst

mailコマンドを使用した際に、存在期間が切れるファイルではなく、たった今ローテーションされたファイルを送信します。

maillast

mailコマンドを使用した際に、たった今ローテーションされたファイルではなく、存在期間が切れたファイルを送信します。(これがデフォルトの動作です)

maxage count

<count>日よりも古いローテーションされたログを削除します。ログがローテーションされるときのみこれがチェックされます。maillastmailが指定されている場合、対象のファイルが送信されます。

maxsize サイズ

ログのサイズが、指定されたサイズよりも大きくなった場合に、追加で指定されている時間間隔(daily, weekly, monthly, yearly)に関わらずローテーションします。

sizeオプションと異なる点は、時間間隔オプションと相互排他的であり、最後にローテーションされた日時を考慮せずにローテーションされるということです。maxsizeオプションが使われる場合、ログファイルのサイズとタイムスタンプの両方が考慮されます。

minsize サイズ

ログのサイズが、指定されたサイズよりも大きくなった場合にローテーションされます。ただし、
追加で指定されている時間間隔(daily, weekly, monthly, yearly)が経過するよりも前にはローテーションしません。

sizeオプションと異なる点は、時間間隔オプションと相互排他的であり、最後にローテーションされた日時を考慮せずにローテーションされるということです。minsizeオプションが使われる場合、ログファイルのサイズとタイムスタンプの両方が考慮されます。

missingok

ログファイルが存在しない場合でも、エラーメッセージを出力せずに次のファイルへ移ります。nomissingokも参照してください。

monthly

月の中で初めてlogrotateが実行された時にログファイルをローテーションします。(通常、これは月の初日です。)

nocompress

旧バージョンのログを圧縮しません。compressも参照してください。

nocopy

元のログファイルをコピーしません。(このオプションはcopyオプションを上書きします。)

nocopytruncate

元のログファイルをコピーした後に切り捨てません。(このオプションはcopytruncateオプションを上書きします。)

nocreate

新しいログファイルを作成しません。(このオプションはcreateオプションを上書きします。)

nocreateolddir

olddirオプションで指定されたディレクトリが存在しない場合でもディレクトリを作成しません。

nodelaycompress

1つ前のログファイルを圧縮するのを、次回のローテーション時まで遅らせません。(このオプションはdelaycompressオプションを上書きします。)

nodateext

旧バージョンのログファイルに日時を付加しません。(このオプションはdateextオプションを上書きします。)

nomail

旧バージョンのログファイルをメール送信しません。

nomissingok

ログファイルが存在しない場合、エラーを出力します。これはデフォルトの動作です。

noolddir

ログは、そのログが存在するのと同じディレクトリでローテーションされます。(このオプションはolddirオプションを上書きします。)

nosharedscripts

prerotatepostrotateのスクリプトを、各ファイルをローテーションするたびに実行します。(これはデフォルトの動作です。このオプションはsharedscriptsオプションを上書きします。)ログファイルへの絶対パスは、最初の引数としてスクリプトに渡されます。

スクリプトがエラーで終了した場合、当該のログファイルに対する残りのアクションは実行されません。

noshred

古いログファイルを削除するときに、shredを使用しません。shredも参照してください。

notifempty

ログファイルが空の場合、ローテーションしません。(このオプションはifemptyオプションを上書きします。)

olddir ディレクトリ

ログが、ローテーション時に指定したディレクトリに移動されます。指定されるディレクトリは、copy, copytruncateオプションが指定されない限り、ローテーションされるログファイルと同じ物理デバイスに存在する必要があります。

ディレクトリは、絶対パスが指定されない限り、ログが存在するディレクトリからの相対パスと解釈されます。このオプションはnoolddirオプションを上書きします。

postrotate/endscript

postrotateとendscriptの間の行(これら二つは一行中に単独で書かれなければなりません。)のスクリプトが、ログファイルがローテーションされた後に実行されます。(/bin/sh を使用します。)

これらのディレクティブは、ログファイル定義の中でのみ使用することができます。通常、ログファイルへの絶対パスは、最初の引数としてスクリプトに渡されます。sharedscriptsが指定されている場合、すべてのファイルへの絶対パスがスクリプトに渡されます。

エラー処理については、sharedscriptsnosharedscriptsを参照してください。

prerotate/endscript

prerotateとendscriptの間の行(これら二つは一行中に単独で書かれなければなりません。)のスクリプトが、ログファイルがローテーションされる場合に限り、ローテーション前に実行されます。(/bin/sh を使用します。)

これらのディレクティブは、ログファイル定義の中でのみ使用することができます。通常、ログファイルへの絶対パスは、最初の引数としてスクリプトに渡されます。sharedscriptsが指定されている場合、すべてのファイルへの絶対パスがスクリプトに渡されます。

エラー処理については、sharedscriptsnosharedscriptsを参照してください。

firstaction/endscript

firstactionとendscriptの間の行(これら二つは一行中に単独で書かれなければなりません。)のスクリプトが、ワイルドカードで指定されたパターンにマッチするすべてのログがローテーションされる前に、一度だけ実行されます。(/bin/sh を使用します。)これは、prerotateスクリプトが実行される前に実行されます。ただし、少なくとも1つのログファイルが実際にローテーションされる場合のみ実行されるということに注意してください。

これらのディレクティブは、ログファイル定義の中でのみ使用することができます。すべてのファイルへの絶対パスが最初の引数としてスクリプトに渡されます。

スクリプトがエラー終了した場合、その後の一切の処理は行われません。lastactionも参照してください。

lastaction/endscript

lastactionとendscriptの間の行(これら二つは一行中に単独で書かれなければなりません。)のスクリプトが、ワイルドカードで指定されたパターンにマッチするすべてのログがローテーションされた後に、一度だけ実行されます。(/bin/sh を使用します。)これは、postrotateスクリプトが実行された後に実行されます。ただし、少なくとも1つのログファイルがローテーションされた場合のみ実行されるということに注意してください。

これらのディレクティブは、ログファイル定義の中でのみ使用することができます。すべてのファイルへの絶対パスが最初の引数としてスクリプトに渡されます。

スクリプトがエラー終了した場合、エラーメッセージを出力するだけです。(これが最後の動作だからです。)firstactionも参照してください。

preremove/endscript

preremoveとendscriptの間の行(これら二つは一行中に単独で書かれなければなりません。)のスクリプトが、ログファイルの削除前に1度だけ実行されます。(/bin/sh を使用します。)logrotateは、すぐ削除されるファイルの名前をスクリプトに渡します。firstactionも参照してください。

rotate 回数

ログファイルが削除もしくは指定されたメールアドレスへ送信されるまでにローテーションする回数を指定します。回数が0の場合、旧バージョンのログはローテーションされずに削除されます。

size サイズ

ログファイルのサイズが、指定されたサイズよりも大きい場合のみローテーションします。サイズの後ろに”k”をつけるとキロバイト、”M”をつけるとメガバイト、”G”をつけるとギガバイトと解釈されます。

sharedscripts

通常、prerotateとpostrotateスクリプトはローテーションされるログファイルごとに実行され、そのログファイルへの絶対パスがスクリプトの最初の引数として渡されます。

これは、ひとつのスクリプトが複数のログファイル(例えば、 /var/log/news/* のようにして指定されたもの)に対して毎回実行されるということです。このオプションが指定された場合、ワイルドカード指定にどんなに多くのファイルがマッチしたとしても、スクリプトは一度だけ実行されます。ただし、ワイルドカードのパターンにマッチしたファイルのうちローテーションが必要なものが一つもない場合、スクリプトは実行されません。

スクリプトがエラー終了した場合、残りのアクションはどのログファイルに対しても実行されません。このオプションはnosharedscriptsオプションを上書きし、createオプションを暗黙的に指定します。

shred

unlink()の代わりに、shred -u を使用してログファイルを削除します。これは、削除された後のログを読むことができないことを保証します。このオプションはデフォルトではオフです。noshredも参照してください。

shredcycles 回数

GNU shred(1) に、削除前にログファイルを上書きする回数を指示します。このオプションが省略された場合、shredのデフォルト値が使用されます。

start 数字

ファイル名に追加される、ローテーション回数の始まりとなる数字を指定します。例えば、0を指定した場合、オリジナルのログファイルからローテーションされたログファイルは、.0の拡張子つきで作成されます。9を指定した場合は、0~8を飛ばして.9の拡張子つきで作成されます。

startを指定しない通常の場合と同じく、ファイルはrotateディレクティブで指定された回数ローテーションされます。

su ユーザー名 グループ名

指定されたユーザーとグループで、ログファイルをローテーションします。通常、デフォルトはいずれもrootです。ユーザー名にはローテーションに用いるユーザー名、グループ名にはローテーションに用いるグループ名を指定します。

tabooext [+] 拡張子リスト

ローテーションから除外される拡張子を指定します。”+”を拡張子のリストの前につけた場合、除外拡張子リストは拡張され、何もついていない場合は置き換えられます。デフォルトの除外拡張子リストには、.rpmsave, .rpmorig, ~, .disabled, .dpkg-old, .dpkg-dist, .dpkg-new, .cfsaved, .ucf-old, .ucf-dist, .ucf-new, .rpmnew, .swp, .cfsaved, .rhn-cfg-tmp-* が含まれています。

weekly [曜日]

ログファイルを曜日ごとに1回、または最後のローテーションから7日以上経過したときにローテーションします。(正確な時刻は無視しています。)曜日の指定方法は以下のようになります。: 0は日曜、1は月曜、…、6は土曜を表します。特別な値、7は曜日とは無関係に7日ごとにローテーションすることを指定します。曜日指定が省略された場合は、日曜日が指定されます。

yearly

現在の年と、最後にログがローテーションされた時点での年が異なる場合、ログをローテーションします。

ファイル

/var/lib/logrotate/logrotate.status デフォルトのステータスファイル

/etc/logrotate.conf 設定ファイル

こちらも参照

gzip(1)

<https://github.com/logrotate/logrotate>

著者

オリジナル: Erik Troan, Preston Brown, Jan Kaluza.

<https://github.com/logrotate/logrotate>

日本語訳: https://hackers-high.com

 

オリジナル:2002年11月5日(水) 日本語訳:2018年11月1日(木)LOGROTATE(8)

あわせて読みたい

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です