解决:php-5.4.17的ERROR: unable to read what child say: Bad file descriptor (9)

因为公司开发部的须要,如今须要使用php-5.4.17,按照惯例下载、安装、配置。可是在配置好了以后,屡次重启php-fpm,发现php-fpm.log里有不少下面的错误信息:php

[24-Aug-2013 04:29:05] ERROR: unable to read what child say: Bad file descriptor (9)
[24-Aug-2013 04:29:05] ERROR: unable to read what child say: Bad file descriptor (9)
[24-Aug-2013 04:29:05] ERROR: unable to read what child say: Bad file descriptor (9)
[24-Aug-2013 04:29:05] ERROR: unable to read what child say: Bad file descriptor (9)
[24-Aug-2013 04:29:05] ERROR: unable to read what child say: Bad file descriptor (9)

真是奇怪了,配置也没有什么特别的,都和老版本同样啊!bash

配置文件内容以下:ide

[global]
pid = run/php-fpm.pid
error_log = log/php-fpm.log
log_level = notice
daemonize = yes
rlimit_files = 65536
[www]
user = daemon
group = daemon
listen = 127.0.0.1:9000
listen.allowed_clients = 127.0.0.1
pm = static
pm.max_children = 128
pm.max_requests = 500
pm.status_path = /status
ping.path = /ping
ping.response = pong
slowlog = var/log/$pool.log.slow
request_slowlog_timeout = 2s
request_terminate_timeout = 15s
rlimit_files = 65536
catch_workers_output = yes
php_flag[display_errors] = on

后来发现是catch_workers_output = yes形成的,把yes改为no就行了,不报错了。php-fpm

可是这个功能正是须要的,因此我想这应该是php-5.4.17的一个bug,最后不用这个版本了,用了php-5.3.27。google

编译安装方法同php-5.4.17相同,反复重启仍是出现和php-5.4.17相同的错误,真是见鬼了。.net

开始google吧,最后发现问题了,的确是个bug。ip

bug地址:https://bugs.php.net/bug.php?id=65398&edit=3开发

能够看到存在这个bug的版本有3个,分别是:5.3.27, 5.4.17, 5.5.1。get

解决方法也就有了,bug页下面提供了一个补丁,打上补丁就ok了,具体操做以下:requests

下载补丁文件:

wget -O fpm-race-condition.patch 'https://bugs.php.net/patch-display.php?bug_id=65398&patch=fpm-race-condition.patch&revision=1375772074&download=1'

打补丁:

patch -d php-5.3.27 -p0 < fpm-race-condition.patch

从新编译、安装。此次把catch_workers_output = yes开启,再次反复重启再也不出现那个错误了。

ok,问题解决!

相关文章
相关标签/搜索