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

多次重启php-fpm,发现php-fpm.log里有很多下面的错误信息

[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)

发现是catch_workers_output = yes造成的,把yes改成no就好了,不报错了。

但是这个功能正是需要的,所以我想这应该是php-5.4.17的一个bug,最后不用这个版本了,用了php-5.3.27。

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

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

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

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

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

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开启,再次反复重启不再出现那个错误了。