2010年4月27日

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

中出です。

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


> ということは「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 mailing list PHP-users@xxxxx
http://ml.php.gr.jp/mailman/listinfo/php-users
PHP初心者のためのページ - 質問する前にはこちらをお読みください
http://oldwww.php.gr.jp/php/novice.php3


投稿者 xml-rpc : 2010年4月27日 16:22
役に立ちました?:
過去のフィードバック 平均:(0) 総合:(0) 投票回数:(0)
本記事へのTrackback: http://hoop.euqset.org/blog/mt-tb2006.cgi/95503
トラックバック
コメント
コメントする




画像の中に見える文字を入力してください。