Ubuntu的php5-fpm在重载时抛出未知的实例

我在我的VPS上遇到了ubuntu和php5-fpm的一些问题。 PHP工作正常,但是当我试图重新加载/重新启动/停止它会抛出terminal错误。 基本上,我不能停止的PHP,因为它不承认实例

它说:“重新加载:未知的实例:”如果我尝试“服务php5-fpm重启”它是未知的实例,并在日志

[15-Nov-2013 11:56:40] ERROR: An another FPM instance seems to already listen on /var/run/php5-fpm.sock [15-Nov-2013 11:56:40] ERROR: FPM initialization failed [15-Nov-2013 11:56:40] NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful 

我有PHP监听/var/run/php5-fpm.sock; 我使用nginx的networking服务器,并正确configuration

 fastcgi_pass unix:/var/run/php5-fpm.sock; 

(或者我知道)还需要提到,这是在重新启动后发生的。

网站运作良好,但我不认为这是一个好兆头。 有什么想法吗 ? 谢谢。

编辑:我按照build议在下面的文章。 看来,如果我杀了进程,然后使用开始/停止它工作正常。 但是,使用reload命令后,它将停止重新分配实例。

 root@developer2:/# service php5-fpm stop stop: Unknown instance: root@developer2:/# ps -ef UID PID PPID C STIME TTY TIME CMD root 1 0 0 Nov14 ? 00:00:00 init root 1101 1 0 Nov14 ? 00:00:00 /sbin/udevd --daemon root 1168 1 0 Nov14 ? 00:00:00 /usr/sbin/sshd -D root 1227 1 0 Nov14 ? 00:00:00 /usr/sbin/xinetd -dontfork -pidfile /var/run/xinetd.pid -stayalive -inetd_compa root 1229 1 0 Nov14 ? 00:00:00 cron mysql 1249 1 0 Nov14 ? 00:00:18 /usr/sbin/mysqld syslog 1283 1 0 Nov14 ? 00:00:00 /sbin/syslogd -u syslog memcache 1293 1 0 Nov14 ? 00:00:07 /usr/bin/memcached -m 64 -p 11211 -u memcache -l 127.0.0.1 root 1426 1 0 Nov14 ? 00:00:00 /usr/lib/postfix/master postfix 1440 1426 0 Nov14 ? 00:00:00 qmgr -l -t fifo -u root 1468 1 0 Nov14 ? 00:00:00 /usr/sbin/varnishd -P /var/run/varnishd.pid -a :80 -T localhost:6082 -f /etc/va nobody 1469 1468 0 Nov14 ? 00:01:14 /usr/sbin/varnishd -P /var/run/varnishd.pid -a :80 -T localhost:6082 -f /etc/va root 1593 1 0 Nov14 ? 00:00:14 /usr/bin/python /usr/bin/fail2ban-server -b -s /var/run/fail2ban/fail2ban.sock root 1595 1 0 Nov14 ? 00:00:00 /usr/lib/gamin/gam_server www-data 3535 1 0 Nov14 ? 00:00:30 php-fpm: pool www postfix 10016 1426 0 11:18 ? 00:00:00 pickup -l -t fifo -u -c root 10064 1168 0 11:37 ? 00:00:00 sshd: root@pts/0 root 10080 10064 0 11:37 pts/0 00:00:00 -bash root 10143 1168 0 11:47 ? 00:00:00 sshd: root@notty root 10159 10143 0 11:47 ? 00:00:00 /usr/lib/openssh/sftp-server root 11330 1 0 12:03 ? 00:00:00 nginx: master process /usr/sbin/nginx www-data 11331 11330 0 12:03 ? 00:00:00 nginx: worker process www-data 11332 11330 0 12:03 ? 00:00:00 nginx: worker process www-data 11333 11330 0 12:03 ? 00:00:00 nginx: worker process www-data 11334 11330 0 12:03 ? 00:00:00 nginx: worker process root 11465 1168 0 12:14 ? 00:00:00 sshd: root@notty root 11481 11465 0 12:14 ? 00:00:00 /usr/lib/openssh/sftp-server root 11519 10080 0 12:23 pts/0 00:00:00 ps -ef root@developer2:/# kill 3535 root@developer2:/# service php5-fpm start php5-fpm start/running, process 11529 root@developer2:/# service php5-fpm stop php5-fpm stop/waiting root@developer2:/# service php5-fpm start php5-fpm start/running, process 11544 root@developer2:/# service php5-fpm stop php5-fpm stop/waiting root@developer2:/# service php5-fpm start php5-fpm start/running, process 11559 root@developer2:/# service php5-fpm reload root@developer2:/# service php5-fpm reload reload: Unknown instance: 

编辑2:我的php5似乎创build3个进程

 root 11813 1 1 12:34 ? 00:00:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf) www-data 11815 11813 0 12:34 ? 00:00:00 php-fpm: pool www www-data 11816 11813 0 12:34 ? 00:00:00 php-fpm: pool www 

当我使用重载function主进程消失,我不得不手动杀死其他2个进程,以便能够正确地重新启动它。

这是一个Ubuntu的错误。 在/etc/init/php5-fpm.conf中,有一个注释掉的行reload signal USR2 ,它使重载功能通过发送SIGHUP来终止php5-fpm主进程。 任何进一步的重新加载,重新启动或停止都将失败,因为主进程已经终止。

我在Ubuntu 14.04中通过创建一个带有单行reload signal USR2的文件/etc/init/php5-fpm.override解决这个问题。 感谢Jurian Sluiman在这个答案中的评论。

以下是主要的错误报告 , 建议的解决方法和解决方法的确认 。

 $ ps aux | grep php USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 1966 0.0 0.9 473276 37040 ? Ss 10:03 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf) www-data 2009 0.0 1.5 478280 62500 ? S 10:03 0:01 php-fpm: pool www www-data 2011 0.0 1.3 476504 55220 ? S 10:03 0:00 php-fpm: pool www www-data 2012 0.0 1.6 481592 65840 ? S 10:03 0:00 php-fpm: pool www $ sudo service php5-fpm status php5-fpm start/running, process 1966 $ sudo service php5-fpm stop php5-fpm stop/waiting $ sudo service php5-fpm status php5-fpm stop/waiting $ sudo service php5-fpm start php5-fpm start/running, process 2651 $ sudo service php5-fpm status php5-fpm start/running, process 2651 $ ps aux | grep php USER PID %CPU %MEM VSZ RSS TTY STAT START TIME COMMAND root 2651 0.2 0.9 473276 36996 ? Ss 10:35 0:00 php-fpm: master process (/etc/php5/fpm/php-fpm.conf) www-data 2654 0.0 0.1 473276 7104 ? S 10:35 0:00 php-fpm: pool www www-data 2655 0.0 0.1 473276 7104 ? S 10:35 0:00 php-fpm: pool www www-data 2656 0.0 0.1 473276 7104 ? S 10:35 0:00 php-fpm: pool www 

通常, service命令将会正常工作:

 service php5-fpm restart 

但是,如果出现“unknown instance”(未知实例)问题,则可以使用以下命令杀死进程并重新启动服务:

 sudo pkill php5-fpm; sudo service php5-fpm start 

尝试通过service php5-fpm stop再次停止您的php5-fpm实例。 等待几秒钟。 试着看看哪些进程没有使用ps -ef终止。 通过kill <processId>终止它们。 再次启动php5-fpm。 似乎并不是所有的子进程都被service ...命令正确地终止了。 我在服务器上有类似的问题,但他们并不经常

我使用Envoyer为Laravel遇到了同样的问题 – 这非常烦人。 我的解决方案是按照选项3)在https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376/comments/16

使用单行“reload signal USR2”创建/etc/init/php5-fpm.override文件。

看起来像service命令有时失败。 我不知道原因,但是我最终在/etc/logrotate.d/php5-fpm使用了这个解决方法:

 /var/log/php5-fpm.log { ... postrotate # The original reload command did never work #invoke-rc.d php5-fpm reopen-logs > /dev/null # Workaround for cases when the reload command fails for some reason service php5-fpm reload > /dev/null 2>&1 [ $? = 0 ] || ( service php5-fpm stop; pkill php5-fpm; service php5-fpm start ) > /dev/null endscript } 

为我工作的选项是重置opcache。 在您的站点根目录下创建一个文件opcache-reset.php文件并添加:

 <?php opcache_reset(); ?> 

重置opcache之后,您可以删除该文件或将其移出站点根目录。

与Envoyer部署带我到这里。 我最终使用pkill php5-fpm进程添加了一个'before'部署钩子到Activate New Release操作

当上述答案都不能解决问题时,请测试您的配置以查看您的错误:

 $ php5-fpm -t 

我大多数情况下,你可能在你的/etc/php5/fpm/php-fpm.conf/etc/php5/fpm/pool.d/www.conf

对我来说,原来是池配置文件中的错误(从pool.d目录加载)

尝试运行php-fpm7.0 -t来运行configtest(可执行文件的名称可能因您的安装和服务名称而异)