NEWSYSLOG(8)

名称
newsyslog - システムのログファイルを保守し、適切なサイズに保つ

書式
newsyslog [-CFnrsv] [-R tagname] [-a directory] [-f config_file] [file ...]

解説
newsyslog ユーティリティは cron(8) から定期的に実行されるようにスケジュールされるべきプログラムです。 実行されると、 newsyslog は必要に応じてログファイルを保存 (アーカイブ) します。 あるログファイルを保存する必要があると判断すると、 “logfile” が空になり、 “logfile.0” に前回のログファイルが入り、 “logfile.1” に前々回のログが入り‥‥ といった具合に、 ユーザが指定した数の保存ログが残るよう、 newsyslog はファイルを再編します。 オプションにより、保存ログを圧縮してスペースを節約することもできます。

ログが保存されるのは次の 3 つの場合です:

1.  ログが設定サイズ (キロバイト単位で指定) より大きくなった。

2.  前回ログを保存してから指定した時間が経過した。

3.  ログ入れ替えを行う指定時間になった。

newsyslog の粒度は、このコマンドが cron(8) からどの程度の頻度で実行されるかに依存しています。 newsyslog の実行は十分速いので、毎時間実行するようにスケジュールしても 悪影響はありませんし、 第 3 のモード (前述) はそうなっていることを仮定しています。

起動されると、 newsyslog は設定ファイルを読み込んで、 どのログファイルが潜在的に保存されうるかを決定します。 デフォルトでは、この設定ファイルは /etc/newsyslog.conf です。 設定ファイルの各行には、 newsyslog が処理すべき特定のログファイルに関する情報を記述します。 各行は 5 つの必須フィールドと、4 つのオプションフィールドからなり、 それらは空白で区切られています。 空行や ``#'' で始まる行は無視されます。 ``#'' が行の途中にある場合、 ``#'' 文字とこの後の行の残りは無視されます。 この特殊な意味を避けるために、``#'' を ``\'' でエスケープ可能です。 この場合、前の ``\'' は削除され、``#'' は通常文字として扱われます。 設定ファイルの各フィールドは以下の通りです:

logfile_name
    保存するシステムログファイル名か、リテラル文字列の ``<default>'' です。 特別なデフォルトエントリが使用されるのは、 newsyslog コマンドのコマンドライン上でログファイル名が与えられ、 このログファイル名が設定ファイル注の他のどの行ともマッチしない場合だけです。

owner:group
    このフィールドはオプションであり、 保存ファイルの所有者とグループ名を指定します。 owner あるいは group が空白のままである場合でも ":" は必須です。 指定は数値、あるいは /etc/passwd か /etc/group にある名前で行います。

mode
    ログファイルと保存ログファイルのモードを指定します。

count
    ログファイルそのものに加えて保存しておく保存ファイルの数を指定します。

size
    ログファイルのサイズが size キロバイトに達すると、ログファイルは上記のように入れ換えられます。 このフィールドがアスタリスク (‘*’) で置き換えられると、ログファイル入れ換えに際して そのサイズは考慮されなくなります。

when
    when フィールドは、インターバル、特定の時刻、もしくは両方です。 when フィールドがアスタリスク (‘*’) の場合、ログ入れ替えは size フィールドにのみ依存します。 そうでない場合、 when フィールドは、オプションの、時間単位のインターバルからなります。 これに続けて、単一の ‘@’ 記号と制限された ISO 8601 フォーマットで時刻を指定することもできますし、単一の ‘$’ 記号と時刻を指定し、日に 1 回か週に 1 回か月に 1 回の決まった時刻に ログファイルを入れ替えるように指定することもできます。

    時刻を指定すると、指定した時刻の 1 時間以内に newsyslog が実行された場合のみ、ログファイルを入れ替えます。 インターバル時間が指定された場合、 最後の入れ替えからその時間数が経過した場合に、ログファイルを入れ替えます。 時刻とインターバルの両方が指定された場合、入れ替えが実行されるには、 両方の条件が満たされることが必要です。

    タイムゾーンは指定できません。 現在の実装では、明確に分や秒の部分を指定することは、ほとんどできません。 「1 時間以内」であることのみ、比較するからです。

    ISO 8601 制限付時刻フォーマット

    制限付 ISO 8601 時刻の先行文字は ‘@’ 記号です。制約付 ISO 8601 フォーマットでの特定の時刻の指定は次の通りです: [ [ [ [ [ cc] yy] mm] dd] [ T [ hh [ mm [ ss]]]] ]です。 日付フィールドはオプションであり、デフォルトは現在の日付です。 時刻フィールドはオプションであり、デフォルトは午前 0 時です。 よって、今日が 1999 年 1 月 22 日の場合、次の日付指定はすべて同等です:

    ‘19990122T000000’
    ‘990122T000000’
    ‘0122T000000’
    ‘22T000000’
    ‘T000000’
    ‘T0000’
    ‘T00’
    ‘22T’
    ‘T’
    ‘’

    日・週・月の時刻フォーマット

    日・週・月の時刻フォーマットの先行文字は ‘$’ 記号です。 日・週・月の指定の特定のフォーマットはそれぞれ次の通りです: [Dhh], [Ww[Dhh]], [Mdd[Dhh]] 。 オプションの時刻フィールドのデフォルトは、午前 0 時です。 日と時間の指定の範囲は次の通りです:

    hh  時間であり、0 から 23 の範囲
    w   曜日であり、0 から 6 の範囲で、0 が日曜日
    dd  日であり、1 から 31 の範囲か、最終日を指定するための文字 L または l

    以下に例を示します:

    $D0 毎晩午前 0 時に入れ替えます (@T00 と同じです)
    $D23
        毎晩 23:00 に入れ替えます (@T23 と同じです)
    $W0D23
        毎週日曜日の 23:00 に入れ替えます
    $W5D16
        毎週金曜日の 16:00 に入れ替えます
    $M1D0
        毎月最初の日の午前 0 時に入れ替えます (その日の開始時点です; @01T00 と同じです)
    $M5D6
        毎月 5 日の 6:00 に入れ替えます (@05T06 と同じです)

flags
    このオプションフィールドは 1 つ以上の文字からなり、 この行にマッチするログファイルに対して行われる特殊処理を指定します。 次の正当なフラグがあります:

    B   ファイルがバイナリファイルまたは特殊フォーマットであることを指示します。 通常、 newsyslog はログファイルが入れ換えるときに ASCII メッセージをログファイルに挿入し、 何時そして時には何故ログが入れ換えられたかを示します B が指定された場合、この情報メッセージはログファイルへ挿入されません。

    C   ログファイルが存在せず、かつ -C オプションがコマンドラインに指定されていた場合、 ログファイルが作成されるべきことを指示します。

    G   指定した logfile_name がシェルパターンであることを示し、 このパターンにマッチする全ファイル名を newsyslog がアーカイブすることを意味します。 文法とマッチ規則についての詳細は、 glob(3) を参照してください。

    J   スペース節約のために、保存ファイルの bzip2(1) での圧縮を試みるべきことを newsyslog へ指示します。

    N   このログファイルを入れ替えるときに、 通知されるべきプロセスが存在しないことを示します。

    U   path_to_pid_file で示されるファイルが、プロセス ID ではなくプロセスグループ ID を 含むことを指示します。 このオプションは、そのファイル中の最初の行が負数であり、 プロセス ID と区別できるようになっていることを必要とします。

    W   Z や J フラグと組み合わせて使用すると、本エントリに対する新規ジョブの前に、 直前に開始した圧縮ジョブの完了を newsyslog が待つべきことを示します。 G フラグと組み合わせて使用すると、 パターンに複数のログファイルがマッチし、これらが圧縮される場合、 newsyslog が同時には 1 個の圧縮しか実行しないことを保証します。 これは、同時には 1 個の圧縮ジョブしか走行しないことを保証します。

    Z   スペース節約のために、保存ファイルの gzip(1) での圧縮を試みるべきことを newsyslog へ指示します。

    -   マイナス記号は何も特別な処理を引き起こしませんが、後続フィールド指定時に、 flags フィールドの埋め草として使用可能です。

path_to_pid_file
    このオプションのフィールドは、 デーモンのプロセス ID、または U フラグ指定時にはデーモンのプロセスグループ ID を調べるために 読むファイルを指定します。 このフィールドが存在する場合、 このファイルに書かれたプロセス ID に signal_number が送られます。 このフィールドが存在しない場合、 N 指定時を除き、SIGHUP シグナルが syslogd(8) へ送られます。 正しく認識するために、このフィールドは "/" から開始する必要があります。

signal_number
    このオプションフィールドは、 デーモンプロセスに送られるシグナル番号を指定します。 デフォルトで SIGHUP が送られます。

オプション
newsyslog では以下のオプションが利用できます:

-f config_file
    設定ファイルとして /etc/newsyslog.conf に代えて config_file を使用します。

-a directory
    アーカイブしたログファイルを書き込む directory を指定します。 相対パスを指定した場合、 これを各ログファイルのパスに後置したディレクトリに、 このログファイルのアーカイブログを書き込みます。 絶対パスを指定した場合、 すべてのアーカイブログは指定した directory に書き込まれます。 パス directory のコンポーネントが存在しない場合、 newsyslog が実行されるときに生成されます。

-v  newsyslog を詳細情報出力モードにします。 このモードでは、ログを入れ換えるあるいはそれをスキップするたびに、 そのログファイル名と理由を表示します。

-n  実際にログの入れ換えは行わず、このオプションが指定されない場合に 本来行うはずの処理内容を表示します。

-r  newsyslog は root として動作しなければならない、という制約を取り除きます。 もちろん、 newsyslog は syslogd(8) に HUP シグナルを送れなくなりますから、 このオプションはデバッグにのみ用いるべきです。

-s  ログファイル入れ替え時に通常は送っていたはずの デーモンプロセスへのシグナルを、一切送らないようにします。 入れ替えられるログファイルにとっては、 このオプションは通常次の意味も持ちます。 すなわち、このオプションが無かった場合に通知されるデーモンがいる場合 には、入れ替えられたログファイルは圧縮されないという意味です。 しかしながら、本オプションがもっとも有用なのはおそらく -R オプションと共に指定された場合であり、この場合圧縮は行われます。

-C  1 回指定すると、存在しないが設定ファイルに C が指定されているログファイルを newsyslog は作成します。 複数回指定すると、 newsyslog は存在しないファイルをすべて作成します。 ログファイルがコマンドライン上に指定されると、 -C もしくは -CC は、これらのログファイルにのみ適用されます。

-F  ログを入れ替える条件に合致しないとしても、強制的に newsyslog にログを入れ替えさせます。 システムの問題を診断しているときには、 このオプションの使用により、 問題のみを含む新しいログを提供できるので有用です。

-R tagname
    入れ換え条件が成立していなくても、 newsyslog が指定されたリストのファイルを入れ替えるべきことを指示します。 tagname は、入れ替えられるログファイルに書き込まれるメッセージにのみ使用されます。 これが -F オプションと違うのは、ひとつ以上のファイルを指定する必要があり、 newsyslog がこれらの指定されたファイルに対してのみ動作するという点です。 このオプションの主たる目的は、 複数のログファイルを書くデーモンやプログラムで、 それら自身の条件で入れ替えを引き起こしたいもののために使用することです。 このオプションを使用すると、入れ替えたいときにそれらは newsyslog を実行でき、またシステム管理者が依然として入れ換え規則 (バックアップ保存数や圧縮の種類等) を指定可能とします。 デーモンが newsyslog を -R オプション付きで呼び出すとき、 newsyslog の呼び出し前にそのデーモンは全ログファイルがクローズされていることを 保証することと、 newsyslog が戻った後にログファイルをリオープンすることが必要です 通常、呼び出しプロセスは -s オプションも指定したいでしょうから、入れ替えを強制したプロセス自身には newsyslog はシグナルを送らないでしょう。 シグナル処理を行わないということは、 newsyslog は通常シグナル送信後に数秒待ちますので、 newsyslog は高速に戻ることを意味します。

追加のコマンド行引数を指定すると、 newsyslog はこれらの引数にマッチするログファイルのみを検査します。 そうでない場合、設定ファイルに列挙された全ファイルを検査します。

関連ファイル
/etc/newsyslog.conf
    newsyslog の設定ファイル

バグ
セキュリティ侵害を見つけるためにログを自動的に読むことは、 まだ行っていません。

作者
Theodore Ts'o, MIT Project Athena

Copyright 1987, Massachusetts Institute of Technology

互換性
以前のバージョンの newsyslog ユーティリティは、グループ名の識別にドット (``.'') を使用していました。 FreeBSD 3.3 からは、これはコロン (``:'') 文字になりましたので、 ユーザ名とグループ名にドット文字を含めることが可能です。 後方互換性のために、ドット (``.'') 文字はまだ受け付けられます。

関連項目
gzip(1), syslog(3), chown(8), syslogd(8)