因为公司开发部的须要,如今须要使用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,问题解决!