【日本語man】logrotateの全オプション解説
logrotateの日本語マニュアルがどこを探してもなかったので、作ってみました。
CentOS7 にインストールされているmanを日本語訳して、少し補足説明を加えました。
manは体系的にlogrotateの使い方を学びたい場合には向きませんが、細かいオプションのリファレンスや、詳しい仕様を知るには最適だと思います。
スポンサーリンク
目次
- 1 名前
- 2 書式
- 3 概要
- 4 オプション
- 5 設定ファイル
- 5.1 compress
- 5.2 compresscmd
- 5.3 uncompresscmd
- 5.4 compressext
- 5.5 compressoptions
- 5.6 copy
- 5.7 copytruncate
- 5.8 create モード 所有者 グループ, create 所有者 グループ
- 5.9 createolddir モード 所有者 グループ
- 5.10 daily
- 5.11 dateext
- 5.12 dateformat フォーマット文字列
- 5.13 dateyesterday
- 5.14 delaycompress
- 5.15 extension 拡張子
- 5.16 hourly
- 5.17 ifempty
- 5.18 include ファイルまたはディレクトリ
- 5.19 mail メールアドレス
- 5.20 mailfirst
- 5.21 maillast
- 5.22 maxage count
- 5.23 maxsize サイズ
- 5.24 minsize サイズ
- 5.25 missingok
- 5.26 monthly
- 5.27 nocompress
- 5.28 nocopy
- 5.29 nocopytruncate
- 5.30 nocreate
- 5.31 nocreateolddir
- 5.32 nodelaycompress
- 5.33 nodateext
- 5.34 nomail
- 5.35 nomissingok
- 5.36 noolddir
- 5.37 nosharedscripts
- 5.38 noshred
- 5.39 notifempty
- 5.40 olddir ディレクトリ
- 5.41 postrotate/endscript
- 5.42 prerotate/endscript
- 5.43 firstaction/endscript
- 5.44 lastaction/endscript
- 5.45 preremove/endscript
- 5.46 rotate 回数
- 5.47 size サイズ
- 5.48 sharedscripts
- 5.49 shred
- 5.50 shredcycles 回数
- 5.51 start 数字
- 5.52 su ユーザー名 グループ名
- 5.53 tabooext [+] 拡張子リスト
- 5.54 weekly [曜日]
- 5.55 yearly
- 6 ファイル
- 7 こちらも参照
- 8 著者
名前
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 のように日付を付加してアーカイブします。この日付については、dateformatとdateyesterdayオプションで詳細に設定することができます。
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>日よりも古いローテーションされたログを削除します。ログがローテーションされるときのみこれがチェックされます。maillastとmailが指定されている場合、対象のファイルが送信されます。
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オプションを上書きします。)
prerotateとpostrotateのスクリプトを、各ファイルをローテーションするたびに実行します。(これはデフォルトの動作です。このオプションはsharedscriptsオプションを上書きします。)ログファイルへの絶対パスは、最初の引数としてスクリプトに渡されます。
スクリプトがエラーで終了した場合、当該のログファイルに対する残りのアクションは実行されません。
noshred
古いログファイルを削除するときに、shredを使用しません。shredも参照してください。
notifempty
ログファイルが空の場合、ローテーションしません。(このオプションはifemptyオプションを上書きします。)
olddir ディレクトリ
ログが、ローテーション時に指定したディレクトリに移動されます。指定されるディレクトリは、copy, copytruncateオプションが指定されない限り、ローテーションされるログファイルと同じ物理デバイスに存在する必要があります。
ディレクトリは、絶対パスが指定されない限り、ログが存在するディレクトリからの相対パスと解釈されます。このオプションはnoolddirオプションを上書きします。
postrotate/endscript
postrotateとendscriptの間の行(これら二つは一行中に単独で書かれなければなりません。)のスクリプトが、ログファイルがローテーションされた後に実行されます。(/bin/sh を使用します。)
これらのディレクティブは、ログファイル定義の中でのみ使用することができます。通常、ログファイルへの絶対パスは、最初の引数としてスクリプトに渡されます。sharedscriptsが指定されている場合、すべてのファイルへの絶対パスがスクリプトに渡されます。
エラー処理については、sharedscriptsとnosharedscriptsを参照してください。
prerotate/endscript
prerotateとendscriptの間の行(これら二つは一行中に単独で書かれなければなりません。)のスクリプトが、ログファイルがローテーションされる場合に限り、ローテーション前に実行されます。(/bin/sh を使用します。)
これらのディレクティブは、ログファイル定義の中でのみ使用することができます。通常、ログファイルへの絶対パスは、最初の引数としてスクリプトに渡されます。sharedscriptsが指定されている場合、すべてのファイルへの絶対パスがスクリプトに渡されます。
エラー処理については、sharedscriptsとnosharedscriptsを参照してください。
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”をつけるとギガバイトと解釈されます。
通常、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)
スポンサーリンク