[PHP-users 35167] Re: phpのmail関数がたまにfalseを返す

choice info @ choice-site.com
2010年 4月 27日 (火) 16:22:50 JST


中出です。

レス、ありがとうございます。


> ということは「mail関数がエラーになっている原因は分からないものの、
> エラー時にリトライすれば、リカバリ可能」といいうことですね。
> (PHP側で細工することで、エラー回避できるということ)

はい、そのとおりです。


> > [pid 18263] execve("/usr/sbin/sendmail", ["/usr/sbin/sendmail", "-t", "-i"], [/* 20 vars */]) = -1 EINVAL (Invalid argument)
> > [pid 18263] --- SIGSEGV (Segmentation fault) @ 0 (0) ---
> 
> sendmailを起動しようとして、EINVALエラーで落ちてますね。
> (sendmail自身が起動してませんから、/var/log/syslogに
> sendmailのエラーが出力されるはずもありません)
> 
> ちなみに、ご提示のあった上記のログですが、編集してませんよね?
> (関係なさそうな行を、自分の判断で削除してませんか?
> 親プロセスのログが少なすぎるような気がしたので)

Process 5905 resumed
Process 18259 detached
<... waitpid resumed> [{WIFEXITED(s) && WEXITSTATUS(s) == 0}], 0) = 18259
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0xb7c90000, 4096)                = 0
write(1, "PHP>>> cnt : 3051 ret : 1\n", 26PHP>>> cnt : 3051 ret : 1
) = 26
pipe([3, 4])                            = 0
clone(Process 18263 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7f7c728) = 18263
[pid  5905] close(3)                    = 0
[pid  5905] fstat64(4, {st_mode=S_IFIFO|0600, st_size=0, ...}) = 0
[pid  5905] mmap2(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0xb7c90000
[pid  5905] write(4, "To: root\nSubject: mailsubject\n\nm"..., 40) = 40
[pid  5905] close(4)                    = 0
[pid  5905] waitpid(18263, Process 5905 suspended
 <unfinished ...>

 … 先のメールの[pid 18263]で始まる行 

Process 5905 resumed
Process 18263 detached
<... waitpid resumed> [{WIFSIGNALED(s) && WTERMSIG(s) == SIGSEGV}], 0) = 18263
--- SIGCHLD (Child exited) @ 0 (0) ---
munmap(0xb7c90000, 4096)                = 0
write(1, "PHP>>> cnt : 3052 ret : \n", 25PHP>>> cnt : 3052 ret : 
) = 25
rt_sigprocmask(SIG_BLOCK, [CHLD], [], 8) = 0
rt_sigaction(SIGCHLD, NULL, {SIG_DFL, [], 0}, 8) = 0
rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0
nanosleep({1, 0}, {1, 0})               = 0
pipe([3, 4])                            = 0
clone(Process 18267 attached (waiting for parent)
Process 18267 resumed (parent 5905 ready)
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0xb7f7c728) = 18267
[pid 18267] close(4 <unfinished ...>


となっています。


> (execveがエラーなので、OSに近い部分が原因のような気がします。
> 子プロセスを大量に生成しているので、そのあたりで制限にひっかかって
> いるのかもしれません。それならば/var/log/syslogあたりに
> ログが残ってそうですが、今回はログに何も残ってないということですから
> 該当しなさそうですし)
> 

すみません。
僕の確認したログは/var/log/maillog、/var/log/messages
ですが、他のログでしょうか?
なお、/var/log/maillog、/var/log/messagesには出ていませんでした。


# more /etc/syslog.conf
*.info;mail.none;authpriv.none;cron.none /var/log/messages
mail.* -/var/log/maillog


> $ php -d sendmail_path="cat - " ./mailtest.php
> 
> のように、mail()の出力先をsendmailから、標準出力に切り替えて
> も、同様のエラーが発生するようなら、
> 原因からsendmailは除外してもよさそうです。
> 

いえ、エラーは発生しませんでした。

では、失礼します。

----



PHP-users メーリングリストの案内