[postfix-jp: 4392] .forwardとメール処理の排他制御について

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[postfix-jp: 4392] .forwardとメール処理の排他制御について

head492
こんにちは。鈴木です。

.forwardを利用してプログラムを実行するシステムを作成しているのですが、
メールの排他制御についていまひとつ的を得ないので質問させてください。

MailboxとMaildirがあると思いますが、私の認識ですとMaildir形式だと直列的に処理されるものだと思っています。(そのため結果的に排他)
Mailboxは複数の配送プロセスで利用されるため排他的にはならないという認識でした。
上記の認識に齟齬はないでしょうか?
メール受信時に.forwardからプログラムを呼ぶのですが意図して連続的に複数回メールを送信したときlogの結果が開始と終了が混ざっていたので気がかりです
2017-05-09 11:30:47 処理を開始します。
2017-05-09 11:30:47 処理を開始します。
2017-05-09 11:30:49 処理を終了します。
2017-05-09 11:30:50 処理を終了します。

また設定ファイル/etc/postfix/main.cfを両方コメントアウトされていたのですがこの場合どちらの利用になるものなのでしょうか?
#home_mailbox = Mailbox
#home_mailbox = Maildir/

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.osdn.me/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[postfix-jp: 4393] Re: .forwardとメール処理の排他制御について

SATOH Fumiyasu
さとうふみやす @ OSSTech です。

On Wed, 10 May 2017 18:53:01 +0900,
[hidden email] wrote:
> .forwardを利用してプログラムを実行するシステムを作成しているのですが、

.forward を利用しているということは、Postfix local(8) を
利用しているということでいいですかね。

> メールの排他制御についていまひとつ的を得ないので質問させてください。
>
> MailboxとMaildirがあると思いますが、私の認識ですとMaildir形式だと直列的に処理されるものだと思っています。(そのため結果的に排他)

いいえ、並列です。同時に複数の local(8) が maildir(5) に
メールを書き込んでも問題ない実装になっています。

> Mailboxは複数の配送プロセスで利用されるため排他的にはならないという認識でした。
> 上記の認識に齟齬はないでしょうか?

いいえ。mailbox は適切にロックを取得した上でアクセスされるため、
排他的アクセスです。

もちろん、もしロックを無視してアクセスするプロセスが存在すれば、
競合は発生するでしょうけど…。
(UNIX 系 OS のファイルロックはふつう advisary lock なので無視可能)

> メール受信時に.forwardからプログラムを呼ぶのですが意図して連続的に複数回メールを送信したときlogの結果が開始と終了が混ざっていたので気がかりです
> 2017-05-09 11:30:47 処理を開始します。
> 2017-05-09 11:30:47 処理を開始します。
> 2017-05-09 11:30:49 処理を終了します。
> 2017-05-09 11:30:50 処理を終了します。
>
> また設定ファイル/etc/postfix/main.cfを両方コメントアウトされていたのですがこの場合どちらの利用になるものなのでしょうか?
> #home_mailbox = Mailbox
> #home_mailbox = Maildir/

$ postconf -d -v home_mailbox
home_mailbox =

ですから、postconf(5) の home_mailbox パラメーターのところ(など)に
書かれているように mail_spool_directory パラメーターに従うかと。

$ postconf -d -v mail_spool_directory
mail_spool_directory = /var/mail

なら /var/mail/<ユーザー名> の mailbox 形式。

--
-- Name: SATOH Fumiyasu @ OSS Technology Corp. (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- GitHub Home: https://GitHub.com/fumiyas/
-- PGP Fingerprint: BBE1 A1C9 525A 292E 6729  CDEC ADC2 9DCA 5E1C CBCA

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.osdn.me/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[postfix-jp: 4394] Re: .forwardとメール処理の排他制御について

IWAMOTO Kouichi
In reply to this post by head492
岩本といいます。

On Wed, 10 May 2017 18:53:01 +0900 (JST)
[hidden email] wrote:

> メール受信時に.forwardからプログラムを呼ぶのですが意図して連続的に複数回メールを送信したときlogの結果が開始と終了が混ざっていたので気がかりです
> 2017-05-09 11:30:47 処理を開始します。
> 2017-05-09 11:30:47 処理を開始します。
> 2017-05-09 11:30:49 処理を終了します。
> 2017-05-09 11:30:50 処理を終了します。

佐藤さんが書かれているように mailbox へのアクセスは排他制御が必要ですが、
これは“local を同時には一つしか起動しない”のではなく、“複数の local が
同時に mailbox にアクセスしない”ようになっていて local 自体は複数が同時に
起動される事があります。その為 .forward から実行されるプログラムも複数が
同時に実行される事があります。

デフォルト設定では local での配送は 1 ユーザ辺り 2 通まで同時に行われます。
.forward から実行されるプログラムを複数同時に実行したくない場合は
local_destination_concurrency_limit を 1 に設定して、1 ユーザ辺り同時に
1 通のみ処理されるようにします。

--
いわもと こういち([hidden email]/[hidden email]/[hidden email])
# なるようになれ、明日もイケイケ♪

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.osdn.me/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[postfix-jp: 4395] Re: .forwardとメール処理の排他制御について

head492
On Wed, 10 May 2017 18:53:01 +0900 (JST)
[hidden email] wrote:


佐藤さん岩本さん
ありがとうございます!

>mailbox へのアクセスは排他制御が必要ですが、
>これは“local を同時には一つしか起動しない”のではなく、“複数の local が
>同時に mailbox にアクセスしない”ようになっていて local 自体は複数が同時に
>起動される事があります。その為 .forward から実行されるプログラムも複数が
>同時に実行される事があります。
1メールにつき1処理されれば適宜メールの受信→postfix→プログラム完了まで直列的に実行されると思い込んでいたので
懸念していなかったのですが.forward LOCAL(8)?の実行を1つずつ処理させるにはlocal_destination_concurrency_limitなど
postfixの設定でlocal配送の最大処理数を指定する必要があるって事であっていますでしょうか。

私が阿呆なので考えを整理したいのですが、
-------------------------------
メール受信(サーバに到達)

.forwardからプログラム実行

処理終了
-------------------------------
までの一連のプロセスを開始から終了まで直列にはならない。mailbox形式はあくまでlocalがmailboxにアクセしないようになっている。
そのため私が実現したい.forwardの直列実行(呼ぶプログラムを開始から終了まで1つずつ処理させたい)は
local配送の最大処理数の設定が必要という認識であっていますでしょうか?

ちなみになのですがlocal_destination_concurrency_limit の設定は
master.confのlocalのmaxprocとは別物でしょうか?(どちらもデフォルト状態のままでした)


----- Original Message -----

> From: IWAMOTO Kouichi <[hidden email]>
> To: postfix-jp-list <[hidden email]>
> Cc:
> Date: 2017/5/11, Thu 12:06
> Subject: [postfix-jp: 4394] Re: .forwardとメール処理の排他制御について
>
> 岩本といいます。
>
> On Wed, 10 May 2017 18:53:01 +0900 (JST)
> [hidden email] wrote:
>
>>
> メール受信時に.forwardからプログラムを呼ぶのですが意図して連続的に複数回メールを送信したときlogの結果が開始と終了が混ざっていたので気がかりです
>>  2017-05-09 11:30:47 処理を開始します。
>>  2017-05-09 11:30:47 処理を開始します。
>>  2017-05-09 11:30:49 処理を終了します。
>>  2017-05-09 11:30:50 処理を終了します。
>
> 佐藤さんが書かれているように mailbox へのアクセスは排他制御が必要ですが、
> これは“local を同時には一つしか起動しない”のではなく、“複数の local が
> 同時に mailbox にアクセスしない”ようになっていて local 自体は複数が同時に
> 起動される事があります。その為 .forward から実行されるプログラムも複数が
> 同時に実行される事があります。
>
> デフォルト設定では local での配送は 1 ユーザ辺り 2 通まで同時に行われます。
> .forward から実行されるプログラムを複数同時に実行したくない場合は
> local_destination_concurrency_limit を 1 に設定して、1 ユーザ辺り同時に
> 1 通のみ処理されるようにします。
>
> --
> いわもと こういち([hidden email]/[hidden email]/[hidden email])
> # なるようになれ、明日もイケイケ♪
>
> _______________________________________________
> Postfix-jp-list mailing list
> [hidden email]
> http://lists.osdn.me/mailman/listinfo/postfix-jp-list
>

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.osdn.me/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[postfix-jp: 4396] Re: .forwardとメール処理の排他制御について

SATOH Fumiyasu
さとうふみやす @ OSSTech です。

.forward から起動するプログラムを procmail の lockfile(1) を
介して起動するとか、並列実行を抑制する方法はほかにもありますよ。

On Thu, 11 May 2017 14:19:20 +0900,
[hidden email] wrote:
> >mailbox へのアクセスは排他制御が必要ですが、
> >これは“local を同時には一つしか起動しない”のではなく、“複数の local が
> >同時に mailbox にアクセスしない”ようになっていて local 自体は複数が同時に
> >起動される事があります。その為 .forward から実行されるプログラムも複数が
> >同時に実行される事があります。
> 1メールにつき1処理されれば適宜メールの受信→postfix→プログラム完了まで直列的に実行されると思い込んでいたので
> 懸念していなかったのですが.forward LOCAL(8)?の実行を1つずつ処理させるにはlocal_destination_concurrency_limitなど

local(8) です。小文字。Postfix のプログラムの一つ local。
「(8)」はオンラインマニュアルのセクション番号。
オンラインマニュアルの参照は `man 8 local` で。

local_destination_concurrency_limit は、
local(8) の宛先 (destination) ごとの最大並列数 (concurrency limit)
という意味です。local(8) の場合、宛先とはローカルユーザー。
あるローカルユーザーに対する local(8) プロセスが同時に実行される数。

> postfixの設定でlocal配送の最大処理数を指定する必要があるって事であっていますでしょうか。

上記の通りです。

> 私が阿呆なので考えを整理したいのですが、
> -------------------------------
> メール受信(サーバに到達)
> ↓
> .forwardからプログラム実行
> ↓
> 処理終了
> -------------------------------
> までの一連のプロセスを開始から終了まで直列にはならない。mailbox形式はあくまでlocalがmailboxにアクセしないようになっている。

デフォルトでは並列のときもあります。「あくまで」?

> そのため私が実現したい.forwardの直列実行(呼ぶプログラムを開始から終了まで1つずつ処理させたい)は
> local配送の最大処理数の設定が必要という認識であっていますでしょうか?

ちょっと違いますね。岩本さんのは、ユーザーごとの配送並列数を 1 に
しましょうという提案です。Postfix システム全体ではなく、ユーザーごと。

> ちなみになのですがlocal_destination_concurrency_limit の設定は
> master.confのlocalのmaxprocとは別物でしょうか?(どちらもデフォルト状態のままでした)

それはユーザーごとの制限ではないです。

--
-- Name: SATOH Fumiyasu @ OSS Technology Corp. (fumiyas @ osstech co jp)
-- Business Home: http://www.OSSTech.co.jp/
-- GitHub Home: https://GitHub.com/fumiyas/
-- PGP Fingerprint: BBE1 A1C9 525A 292E 6729  CDEC ADC2 9DCA 5E1C CBCA

_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.osdn.me/mailman/listinfo/postfix-jp-list
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

[postfix-jp: 4398] Re: .forwardとメール処理の排他制御について

head492
こんにちは。鈴木です。
いろいろ試していて返信が遅くなり大変恐縮です。
試みてもう一点、local_destination_concurrency_limitについて知りたいのですが、
例えば4つのアカウントがある場合に、dentsuだけlocal_destination_concurrency_limit=1のように
特定のアカウントのみに設定値を限定することはできないでしょうか?それともpostfixで一律にしか出来ないものなのでしょうか。
/home/mail/hakuhodo
/home/mail/dentsu
/home/mail/adk
/home/mail/daiko

----- Original Message -----
> From: SATOH Fumiyasu <[hidden email]>
> To: postfix-jp-list <[hidden email]>
> Cc:
> Date: 2017/5/11, Thu 14:44
> Subject: [postfix-jp: 4396] Re: .forwardとメール処理の排他制御について
>

> さとうふみやす @ OSSTech です。
>
> .forward から起動するプログラムを procmail の lockfile(1) を
> 介して起動するとか、並列実行を抑制する方法はほかにもありますよ。
>
> On Thu, 11 May 2017 14:19:20 +0900,
> [hidden email] wrote:
>> >mailbox へのアクセスは排他制御が必要ですが、
>> >これは“local を同時には一つしか起動しない”のではなく、“複数の local が
>> >同時に mailbox にアクセスしない”ようになっていて local 自体は複数が同時に
>> >起動される事があります。その為 .forward から実行されるプログラムも複数が
>> >同時に実行される事があります。
>> 1メールにつき1処理されれば適宜メールの受信→postfix→プログラム完了まで直列的に実行されると思い込んでいたので
>> 懸念していなかったのですが.forward
> LOCAL(8)?の実行を1つずつ処理させるにはlocal_destination_concurrency_limitなど
>
> local(8) です。小文字。Postfix のプログラムの一つ local。
> 「(8)」はオンラインマニュアルのセクション番号。
> オンラインマニュアルの参照は `man 8 local` で。
>
> local_destination_concurrency_limit は、
> local(8) の宛先 (destination) ごとの最大並列数 (concurrency limit)
> という意味です。local(8) の場合、宛先とはローカルユーザー。
> あるローカルユーザーに対する local(8) プロセスが同時に実行される数。
>
>> postfixの設定でlocal配送の最大処理数を指定する必要があるって事であっていますでしょうか。
>
> 上記の通りです。
>
>> 私が阿呆なので考えを整理したいのですが、
>> -------------------------------
>> メール受信(サーバに到達)
>> ↓
>> .forwardからプログラム実行
>> ↓
>> 処理終了
>> -------------------------------
>> までの一連のプロセスを開始から終了まで直列にはならない。mailbox形式はあくまでlocalがmailboxにアクセしないようになっている。
>
> デフォルトでは並列のときもあります。「あくまで」?
>
>> そのため私が実現したい.forwardの直列実行(呼ぶプログラムを開始から終了まで1つずつ処理させたい)は
>> local配送の最大処理数の設定が必要という認識であっていますでしょうか?
>
> ちょっと違いますね。岩本さんのは、ユーザーごとの配送並列数を 1 に
> しましょうという提案です。Postfix システム全体ではなく、ユーザーごと。
>
>> ちなみになのですがlocal_destination_concurrency_limit の設定は
>> master.confのlocalのmaxprocとは別物でしょうか?(どちらもデフォルト状態のままでした)
>
> それはユーザーごとの制限ではないです。
>
> --
> -- Name: SATOH Fumiyasu @ OSS Technology Corp. (fumiyas @ osstech co jp)
> -- Business Home: http://www.OSSTech.co.jp/
> -- GitHub Home: https://GitHub.com/fumiyas/
> -- PGP Fingerprint: BBE1 A1C9 525A 292E 6729  CDEC ADC2 9DCA 5E1C CBCA
>
> _______________________________________________
> Postfix-jp-list mailing list
> [hidden email]
> http://lists.osdn.me/mailman/listinfo/postfix-jp-list
>
_______________________________________________
Postfix-jp-list mailing list
[hidden email]
http://lists.osdn.me/mailman/listinfo/postfix-jp-list
Loading...