質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

88.06%

postfix メール受送信の排他について

受付中

回答 2

投稿

  • 評価
  • クリップ 0
  • VIEW 1,467

score 192

下記の記載のようにshとphpを利用してメール送信を実行(あえて1度のshで2通送るように下記のように記載)してみた時
/usr/local/bin/php -f ./mail_send.php $SENDNAME &
/usr/local/bin/php -f ./mail_send.php $SENDNAME &
wait

メールを受信し、処理が完了したときにlogを出力するようにしていたのですが、複数通メールを送信した時、排他制御は行われるのでしょうか?
postfixを利用していて、メールが来た際に.forwardに呼び出すプログラムを記載しています。
メールは直列的に処理されると思っていたのと.forwardの記述は、一つ一つ転送されることになっている。と思っていたので意外です

.forward
"|/usr/local/bin/php /home/mail/test1/request_process.php"
実行結果の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 処理を終了します。
  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 過去に投稿した質問と同じ内容の質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

回答 2

+1

メールは並行して処理されます。
.forwardで処理するならそのまま並行で処理。必要なら処理の中で排他制御を自分で行う。
.forwardで処理せずにメールボックスファイルに書くときは、ファイルに書く段階で排他制御されるでしょう。Mailbox形式ならmailboxファイルの排他制御だし、Maildir形式なら、ファイル名の発番をするところで排他制御が起こります。

受信メールを直列で処理したければ、/etc/postix/master.conflocalの行のmaxprocのカラムをデフォルトの-から1に変えれば、受信メールの処理は同時に1つしか動かなくなります。
localというのは、Postfixが自分サーバー宛てのメールを受信した後に、そのメールをメールボックスに書いたり、.forward処理したりする処理のことです。

ググってみると、各プロセスの図での説明がありました。
http://www.postfix-jp.info/trans-2.1/jhtml/OVERVIEW.html

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/12 10:19

    ありがとうございます
    ローカル配送の制御なので↓のパラメータとかでもできそうですね!
    local_destination_concurrency_limit
    この辺りの制御をユーザ単位でできるのが最も理想的な形ですけど流石に不可能でしょうか。

    キャンセル

-1

実験していないので、見当外れだったらすみません。
メールボックスの形式(MailboxとMaildir)の違いではないでしょうか。

Mailbox形式だと、メールを保存するファイルはユーザーごとに1つしかありません。そのため、メールの読み取りや配送などで複数のプロセスでそのファイルにアクセスする場合、排他制御が必要になります。

一方で、Maildir形式では、1つのメールが1つのファイルとなるため、誤解を恐れずにいうと、排他制御はされません。(同じファイルを処理する場合には排他制御されるとは思います。)

メール保管についてのデフォルト

Postfix manual - LOCAL(8) 

The default per-user mailbox is a file in the UNIX mail spool directory (/var/mail/user or /var/spool/mail/user); the location can be specified with the mail_spool_directory configuration parameter. Specify  a  name ending in / for qmail-compatible maildir delivery.

デフォルトはMailbox形式のようです。
つまり、eugenioさんの場合もMailbox形式でした。

ということは……

.forward
"|/usr/local/bin/php /home/mail/test1/request_process.php"
実行結果の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 処理を終了します。

この処理では、排他制御されているようですね。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2017/05/10 17:20

    ありがとうございます。
    >今回はeugenioさんはMaildir形式を利用していたため、排他制御が行われなかったのだと思います。
    すいませんどちらだか混乱してしまったのですが、排他されるのがMaildirでMailboxが排他されないであっていますでしょうか。
    Maildir形式で利用しているときは排他制御されるので、質問のようにログが出てしまっていても処理事態は直列的に行われているという認識であっていますでしょうか。
    今設定ファイル/etc/postfix/main.cfを確認したのですが
    両方コメントアウトされていたのですがこの場合Mailbox利用になっているのでしょうか?
    #home_mailbox = Mailbox
    #home_mailbox = Maildir/

    キャンセル

  • 2017/05/10 18:13

    改めてPostfixのマニュアルを確認しました。
    そして不適切な部分を削除して、根拠となる内容を追記しました。
    失礼しました。

    端的に申し上げると、
    - 排他制御が行われるのがMailbox形式です。
    - eugenioさんはMailbox形式を利用しているようです。

    キャンセル

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 88.06%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る