[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 メーリングリストの案内