29

我的 VPS 上的 ubuntu 和 php5-fpm 有一些问题。Php 工作正常,但是当我尝试重新加载/重新启动/停止它时它会引发终端错误。基本上,我无法停止 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

我在 /var/run/php5-fpm.sock 上有 php 监听;我将 nginx 用于网络服务器,并且已正确配置

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

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

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

编辑:我按照下面帖子中的建议做了。似乎如果我终止该进程,然后使用启动/停止它可以正常工作。但是,在我使用 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 似乎创建了 3 个进程

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

当我使用重新加载功能时,主进程消失,我必须手动杀死其他 2 个进程才能再次正确启动它。

4

9 回答 9

43

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

我在 Ubuntu 14.04 中通过创建一个/etc/init/php5-fpm.override包含单行的文件来解决这个reload signal USR2问题。归功于 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
于 2015-03-25T10:50:39.993 回答
32

通常,该service命令会很好:

service php5-fpm restart

但是,如果出现“未知实例”问题,您可以使用以下行终止进程并重新启动服务:

sudo pkill php5-fpm; sudo service php5-fpm start
于 2014-12-03T10:14:13.297 回答
10

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

于 2013-11-15T10:21:17.307 回答
5

我在使用Envoyer for Laravel 时遇到了同样的问题——这很烦人。我的解决方案是遵循选项 3) 在https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376/comments/16

创建 /etc/init/php5-fpm.override 文件,其中包含单行“重新加载信号 USR2”。

于 2015-03-30T18:08:41.100 回答
2

与 Envoyer 一起部署将我带到了这里。我最终通过该pkill php5-fpm流程向“激活新发布”操作添加了一个“之前”部署挂钩

于 2016-01-19T00:30:40.893 回答
1

似乎该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
}
于 2015-03-15T12:49:13.473 回答
1

对我有用的选项是重置 opcache。在您的站点根目录中创建文件 opcache-reset.php 文件并添加:

<?php opcache_reset(); ?>

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

于 2015-07-20T04:18:03.797 回答
0

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

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

于 2016-09-01T20:42:52.093 回答
0

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

$ php5-fpm -t

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

于 2016-06-23T18:55:08.070 回答