Path: katsu From: katsu@sra.co.jp (WATANABE Katsuhiro) Message-ID: Date: 30 May 1994 09:07:48 GMT Organization: Software Research Associates, Inc.,Japan In-reply-to: wataru@ntttsd.NTT.jp's message of 13 Apr 1994 02:20:54 GMT Newsgroups: fj.mail Subject: Re: locking of mail drop (Decode MIME when spooling) X-Nsubject: Re: mailの排他制御 (Decode MIME when spooling) Distribution: fj References: あまりのフォローの遅さが議論の妨げになっていたらごめんなさい。 記事 で、 wataru@ntttsd.NTT.jp (Wataru KawaKami) さんいはく > >> 本当は排他制御に気を付けなければならないと思いますよ。mail が複数同時 > >> に到着すると困りますよね。 > 同時に到着する場合は、‾/.forwardに渡す際にsendmailが排他制御を > かけているのかと思っていましたが、そうではなさそうですね。  はい、やっていません。./forward からのコマンドの起動(や転送など)を 逐次化しても、資源を排他制御することには役立ちませんし。 > >> 余談ですが、sh(普通の prog mailer)の >> は、 > >> O_APPEND を指定するのではなく、ファイルの最後にポインタを移動するよう > >> な実装になっているはずなので、こうした事故が起きても単にどれかのメール > >> が静かに失われる形になり、そもそも事故に気が付くこともできない可能性が > >> あると予想します。 > そういえば、shについては、昔のunix magazineにでていたような > かすかな記憶があります。  調べてみたら、文献[1]に詳しい説明がありました。 > ちなみに、cshでも同じなんでしょうかね。 > 手元のマシンでは、prog mailerは、 > Mprog, P=/bin/csh > となっています。  csh でも同じだと思います。いろいろなシェルでどうなのか、あるいは どうしてこういった仕様が選択されているかという議論は、UNIX のシェルの 知識をお持ちの方にお任せします。 > それから、$HOMEをnfs mountして、2台のマシンからmailを読んでいる > ので、$HOME/spoolにspoolするようにしているのですが、、/usr/spool/ > mail/usernameをsym-linkにすると、/bin/mailは、sym-linkだと怒って > きますね。 > 仕方なく、不完全ですが、 > "|/usr/local/scripts/mime2xn | /home/wataru/PriMSpool.sh" > みたいな形で、PriMSpool.shというsh-scriptで、lock-fileを作り、 > これが複数起動されたときは、waitをかけるようにしました。  lock-file ですか。  シェルスクリプトから排他制御するための不可分(atomic)な test and set 命令を、ありふれたコマンドから手軽に得たい場合、私は mkdir(1) や ln(1) -s を使うようにしてます。中身は mkdir(2), symlink(2) そのまま であることを期待するわけです。ロック関係のシステムコールを陽に 用いるのに比べれば手抜きなのかもしれませんが、 while [ -f "いちおうロックファイルのつもりらしい" ] do ちょっと sleep してみる; done touch "いちおうロックファイルのつもりらしい" ここが critical section のとのこと; rm "いちおうロックファイルのつもりらしい" といったような、test と touch を素朴に組み合わせただけで明らかに 隙間が開いたままのものよりは、よほどましだと思います。 参考文献: [1] 齊藤明紀;UNIX 知恵袋「ファイルへの『追加』」; UNIX Magazine 1992年8月号 pp.95-98;アスキー -- 渡邊克宏@SRA