[______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]