我的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
我在php上听了/var/run/php5-fpm.sock; 我使用nginx作为webserver,并使用
进行了正确配置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个进程才能正确启动它。
答案 0 :(得分:42)
这是一个Ubuntu错误。在/etc/init/php5-fpm.conf中,有一个注释掉的行reload signal USR2
,它使重载函数通过发送SIGHUP来终止php5-fpm主进程。任何进一步的重新加载,重新启动或
停止将失败,因为主进程已终止。
我在Ubuntu 14.04中通过创建一个文件/etc/init/php5-fpm.override
并在其中包含单行reload signal USR2
来修复此问题。致Jurian Sluiman在this answer中的评论。
以下是primary bug report,proposed workarounds和confirmation of workaround。
$ 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
答案 1 :(得分:32)
通常,service
命令可以正常运行:
service php5-fpm restart
但如果"未知实例"出现问题,您可以使用以下行终止进程并重新启动服务:
sudo pkill php5-fpm; sudo service php5-fpm start
答案 2 :(得分:10)
尝试再次通过service php5-fpm stop
停止php5-fpm实例。等几秒钟。试着看看哪些进程没有使用ps -ef
终止。按kill <processId>
终止它们。再次启动php5-fpm。
看来,service ...
命令并未正确终止所有子进程。
我在服务器上有类似的问题,但它们不是常规的
答案 3 :(得分:5)
我使用 Envoyer for Laravel 遇到了同样的问题 - 这非常烦人。我的解决方案是在https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376/comments/16
处遵循选项3)使用单行“重载信号USR2”创建/etc/init/php5-fpm.override文件。
答案 4 :(得分:2)
与Envoyer一起部署将我带到了这里。我最终使用pkill php5-fpm
进程
答案 5 :(得分: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
}
答案 6 :(得分:1)
对我有用的选项是重置opcache。在站点根目录中创建文件opcache-reset.php文件并添加:
<?php opcache_reset(); ?>
重置opcache后,您可以删除该文件或将其移出您的站点根目录。
答案 7 :(得分:0)
如果上述答案均未解决问题,请测试您的配置以查看错误:
$ php5-fpm -t
在大多数情况下,您可能在/etc/php5/fpm/php-fpm.conf
或/etc/php5/fpm/pool.d/www.conf
答案 8 :(得分:0)
对我来说,结果是池配置文件中的错误(从pool.d目录加载)
尝试运行php-fpm7.0 -t
以运行configtest(可执行文件的名称可能因您的安装和服务名称而异)