[PREVIOUS CHAPTER] [NEXT CHAPTER]

5 Expire (一定日数より古いファイルは消す)とNewSyslog

    この章は「古いファイルを自動的に消す」「ローテーションしながら古いファ
    イルは消えていく」動作について解説します。

    5.1	Introduction

    Expire(一定日数以上古いファイルを消去する方法)は従来 HOOK をかけるやり
    方で実装されていましたが、正式なライブラリとして使えるようにしました。
    別に中身は変わっていません。単にHOOKを書かなくても良くなったということ
    だけです。

    5.2	自動アーカイブと自動 expire

    『アーカイブ』はメール一通一通ではなくある程度の数を一つにまとめて保存
    する方法のことを意味しています。$DIR/spool に一通ずつためるのもアーカ
    イブという概念だとは思いますが、このドキュメントでは区別しています。

    手動でアーカイブ作成や古い記事の削除をするのがある意味で安全ですが、
    FML に自動でそれらを行なわせることもできます。$USE_EXPIRE (古い記事の
    削除)と $USE_ARCHIVE (アーカイブの作成) という変数を 1 にするとFMLがアー
    カイブとexpireを行ないます。

    expire と アーカイブ は相反する概念です。２つを同時におこ名和させる場
    合はパラメータの選び方に要注意です。デフォールトはそれを考慮した数値に
    なっているため、少しDISK効率が悪いかもしれません。

    「絶対に記事はうしなわれてはいけない」という強い要求がある場合に
    「expire しつつアーカイブも作ることを全自動で行なう」ことは推奨できま
    せん。というのはだれかがOSのtarやgzipを間違えて入れ換えたとかいう場合
    を想定してみると危険性がわかります。expire はそういうものに依存してい
    ないの普通に動いて記事を消していきますが、アーカイブは作成されなくなっ
    てしまいます。よって
    	『自分の設定は万全、大丈夫』
    	『うちのOSはそんなことはしない、大丈夫』
    	『まぁこのＭＬの記事はちょっとくらい失われてもOK』
    など容認できる必要があります。

    アーカイブかExpireのどちらかを自動でどちらかを手動でやるのが理想なのか
    もしれません。安全性からいえばやはり自動アーカイブ＋手動expireですね。
    両方やる場合はアーカイブだけを設定してみて、うまくいっていることを確認
    してから expire を設定するべきでしょう。

    パラメータの選び方ですが、ファイルの取り寄せ等に影響があるため必ず
    $EXPIRE_LIMIT が日数ではなく"記事の数"(残したい記事の数)で指定して下さ
    い。そして次の条件

    	$EXPIRE_LIMIT > $ARCHIVE_UNIT

    が必要です。念のため

    	$EXPIRE_LIMIT = $ARCHIVE_UNIT * 2;

    くらいにしておくのが良いでしょう。そうでない場合整合性が保証されないの
    でエラーとなります。もちろん毎回ファイルを全て調べる等の莫大な
    overhead をかければ実現はできますが、コストが見合うとは思えないので実
    装されていません。

    5.3	Config.ph Configurations

    	$USE_EXPIRE = 1; (default is 0, "not expire")

    にすると expire をします。デフォールトでは

    	$EXPIRE_LIMIT = "7days";

    で、7日つまり一週間分の記事だけを残して後は消去します。単位は
    $EXPIRE_LIMIT で調整します。$EXPIRE_LIMIT のシンタックスは

    	数字days (日数)
    	数字	 (記事の数)

    のいづれかです。例:

    	7days	7日間保存
    	100	最近100通の記事を残して後は消去

    [参考]

    参考までにHOOKを使う従来のやり方を書いておくと

       SYNOPSIS:
    	&Expire(場所, 日数(以上古いファイルを消す));

    例：
    	$FML_EXIT_HOOK .= q#
    		&use('expire');
    		&Expire($SPOOL_DIR, 7);
    	#;

    と設定すれば、$SPOOL_DIR 以下のファイルにたいして 7日以上古いファイル
    を消します（いきなり消します。注意）

    例:	ファイル数で消すファイルを決める

       SYNOPSIS:
    	&Expire(場所, 残しておきたい記事数, 1);

    例：
    	$FML_EXIT_HOOK .= q#
    		&use('expire');
    		&Expire($SPOOL_DIR, 100, 1);
    	#;

    と設定すれば、$SPOOL_DIR 以下の最新の100個のみを残して後は消去します
    (いきなり消します。注意)。

    5.4	expire.pl コマンドラインオプション (bin/expire.pl)

    expire.pl [-h] [-e expire_days] [-s spool_directory] [-n]

        -h this help
        -e expireする日数
        -n （残すファイル数を設定して、expireするモード）
        -s スプール

[PREVIOUS CHAPTER] [NEXT CHAPTER]