[______TOC_______] [NEXT CHAPTER]

1 概要

    まとめおくりとは「リアルタイムではなくＮ時間おきにＮ時間分のＭＬの記事
    をまとめて送りつける」ことです。

    fml では msend というプログラムを定期的に実行することでまとめおくりを
    行ないます。このためにOSにある"指定されたプログラムを定期的に実行する"
    cron という機能を使います。これは OS の cron という機能を使って設定を
    してください。

    msend => 2.0 section
    cron  => 2.17 section

    /var/spool/ml/elena/crontab というファイルがOSに設定するべき
    見本のファイルです。設定は crontab というコマンドを使います。

    	% crontab /var/spool/ml/elena/crontab

    1.1	管理者のするべきこと

    cron に設定して下さい。それだけです。あとは
    	まとめ送りプログラムがよきにはからいます。
    	ユーザのまとめ送り希望者はコマンドで設定するように教える
    だけです。

    % makefml newml elena
    % crontab /var/spool/ml/elena/crontab

    もし、複数のＭＬがあるなら /var/spool/ml/etc/crontab/ を利用するのが良
    いでしょう。

    % crontab /var/spool/ml/etc/crontab/fml
                                         ↑

    この部分はＭＬを動かすためのユーザです。デフォールトは仮想ユーザ fml
    です。このファイルは newml を実行するたびに update され存在するすべて
    のＭＬについてまとめ送りを定期的に試みます。

    1.2	ユーザのすること

    	matome 3mp

    といったコマンドを elena-ctl へおくってもらうことです。一般形は

    	matome 時間とオプション

    です。ヘルプファイルにせつめいがあります。
    例: /var/spool/ml/elena/help

    通常配送に戻す時は

    	matome 0

    1.3	Cron (FML Vixie cron compatible program, bin/cron.pl)

    ○ cron.pl って何？
    cron.pl(例: /usr/local/fml/bin/cron.pl)はシステムにユーザごとに定義で
    きる cron がない場合に使います。まずはユーザごとに定義できる cron がな
    いかどうかを調べて下さい。まずはマニュアルを引いてみて下さい。
    	man cron
    	man crontab
    を試してみるのが最初です。

    ○ どう動くの？
    動きとしてはOS附属の cron と同じです。つまり１分に一回起きて今やるべき
    ことがあるかどうかを確認するためにcrontabを見ます。そしてするべきこと
    があればそれを実行します。

    ○ cron.pl は誰がいつ走らせるか？
    管理者が手で起動してもいいし、fml.pl が cron.pl を走らせてるようにして
    もよいです。注意として fml.pl から cron.pl を走らせると各ＭＬごとに一
    つのcronが走って無駄です。複数のＭＬがある場合は一つの cron.pl で複数
    のＭＬを担当するような設定ファイルを書くのが良いです。

    fml.pl から起動すると何回も cron.pl を起動しますが、複数は走りません。
    最初の一個以外は自殺します。各ＭＬごとに一つです。$CRON_PIDFILE
    ($DIR/var/run/cron.pid)というファイルにプロセス番号を保存し一意性を保
    証しています。

    ○ cron.plは一度起動するとずっと走っている？

    理想的としてはそうです。が、cron.pl が知らない間に落ちてるかもしれない？
    という可能性もあります。システムの cron なら大丈夫ですが、マシンがリブー
    トしたら当然FMLのcronは止まったままになってしまいます。そのため何らか
    の方法で定期的に起動しなおしてやる必要があります。

    ○ 注意
    また長く走り過ぎておかしくなる場合も考慮してデフォールトでは24時間で次
    の cron.pl を起動しなおします。これは予防策であって必ずしもする必要は
    ありません。-n オプションをつけるとずっと走り続けるようになります。

    ○ コマンドシンタックス

    SYNOPSIS
    	cron.pl [-a] [-d] [-b43] [-fcrontab] [-bd] $DIR [$LIBDIR]

        -d                debug mode
        -a                run eternally(default: 180sec. = 60sec. * 3times)
        -n                working all times without RESTART
        -mtimes           run from now to (60 * times) sec. after
        -fcrontab-file    alternative crontab
        -h                show this help and exit
        -bd		      daemon (Become Daemon)
        -bOSTYPE          -b43(OSTYPE = 43): 4.3BSD Like. not mailed to you

    -b43 オプションは

    	$CRON_NOTIFY    = 0; (default 1)

    ということをします。デフォールトでは cron が何らかの処理をした場合はそ
    のログをそのユーザに知らせます。

    またデフォールトでは cron.pl はデーモン化しません。

    	-onotty

    オプションをつけると自分でデーモン化します。
    うまくいかないＯＳがありうることを考慮してデフォールトでは

    	$NOT_USE_TIOCNOTTY = 1;		# no ioctl

    つまりデーモンにならないようになっています。

    1.4	Vixie Cron

    4.4BSD には Paul Vixie の書いた各ユーザごとに cron を定義できる cron
    が入っています。これがあるなら cron.pl は要らないです。詳しくはシステ
    ムのマニュアルを見て下さい。
    ＃全然関係ないけど vixie enterprise にftp.NetBSD.ORGとかあります。
    ＃Vixie偉い

    cron (8) - daemon to execute scheduled commands (Vixie Cron)
    crontab (1) - maintain crontab files for individual users (V3)
    crontab (5) - tables for driving cron

    古いOSにはありません。しかし元々入っていなくても管理者の人がインストー
    ルしているかもしれません。探してみる価値/聞いてみる価値はあります。

    FMLのcron.plはあくまでも『そういう cron を提供してくれていないOS』でま
    とめ送りを支援するためのものです。こういうサービスはOSが提供してくれる
    のが本筋というべきでしょう。

    1.5	cron.plを自動的に起動するようにするためには？

    システムが定期的に何かをしてくれないので、cron.pl をなんとかして(疑似
    定期的に)起動したいわけです。問題はどう起動するか？だけです。

    まず起動自体は

    	% cron.pl $DIR(config.phの場所) $LIBDIR(libsmtp.plとかの場所)

    の形で起動します。
    ＃注意: Argument がないと、その環境の $HOME にいってしまう

    問題はどうやって定期的に起動をトライするかですが、例えば

       1. たとえば ~/.login で cron.pl を起動するとか(すでに走っていれば走
          らないから大丈夫)…

       2. loginしたとき、まめに(手動で)たちあげるとか…

       3. MLサーバにメールが来たときに起動させる↓とか…

    が考えられます。３の設定としては config.ph に

    	$CRON_PIDFILE = "$DIR/var/run/cron.pid";
    	$CRONTAB      = "$DIR/etc/crontab";

    	$FML_EXIT_PROG = "$LIBDIR/bin/cron.pl $DIR $LIBDIR -a";

    をつけたします。
    ＃いずれも適当にパスとかは変えてください

    cron.pid は cron.pl の pid を記録するファイルです(/var/run/cron.pidに
    相当するもの)。

    crontab は システムの /var/cron/tabs/$USER (4.3BSDの/etc/crontab)に相
    当するものです。makefml newml した時に各ＭＬの HOME (config.phのある場
    所)には crontab という見本(4.4BSD形式) が作られます。4.4BSD 形式ではこ
    れを使えばまとめ送りの設定ができます。

    [Example]
    	% makefml newml elena
    	  ...
    	% cd /var/spool/ml/elena
    	% crontab crontab

    ＊＊＊注意＊＊＊
    cron.pl は 4.4BSD FORMAT を理解します。4.3BSDの形式ではありません

[______TOC_______] [NEXT CHAPTER]