質問: 下記の記載のように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 処理を終了します。 ```
回答: 実験していないので、見当外れだったらすみません。 メールボックスの形式(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 処理を終了します。 > > > この処理では、排他制御されているようですね。