[______TOC_______] [NEXT CHAPTER]
1 概要

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

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


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 と同じです。つまり1分に一回起きて今やるべき
ことがあるかどうかを確認するためにcrontabを見ます。そしてするべきこと
があればそれを実行します。

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

fml.pl から起動すると何回も cron.pl を起動しますが、複数は走りません。
最初の一個以外は自殺します。各MLごとに一つです。$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

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

	$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サーバにメールが来たときに起動させる↓とか…

が考えられます。3の設定としては 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 した時に各MLの 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]