在 WordPress 里作出的修改在主题更新版本的时候全部会丢失所以一直没更新,今天想参考 官方文档(https://codex.wordpress.org/zh-cn:%E5%AD%90%E4%B8%BB%E9%A2%98) 通过子主题的办法升级,但是一点更换主题就白屏以至于整个网站都挂掉了,curl -I 发现是http 500,检查 PHP 进程健在,nginx 健在,检查先前的步骤并无不妥于是开始查日志 /var/log/nginx/error.log 。
[error] 8114#0: *245 FastCGI sent in stderr: "PHP message: PHP Fatal error: Cannot redeclare get_gravatar_back() in /xxxxxxxx/functions.php on line 9" while reading response header from upstream, client: xx.xxx.xxx.xxx, server: www.starduster.me, request: "GET /2015/08/11/CentOS7-linux-pma-session-error/ HTTP/1.1", upstream: "fastcgi://unix:/var/run/php5-fpm.sock:", host: "www.starduster.me", referrer: "http://www.starduster.me/"
似乎是我修改过的 functions.php 出了什么问题,于是想查看一下 PHP 的日志,
NOTICE: configuration file /etc/php5/fpm/php-fpm.conf test is successful
为什么什么消息也没有?
然后一想这个日志是 php-fpm 进程的日志,检查程序运行错误应该在其他地方,于是检查 /etc/php5/fpm/pool.d/www.conf
发现 php_admin_value[error_log] = /var/log/php-fpm/www-error.log 这行被注释掉了,删掉注释,重启服务。
service php5-fpm restart
蹦出了个奇怪的错误:
stop: Unknown instance:
php5-fpm start/running, process 18302
似乎,进程没有停下来?
再试一次:
确认这个出现了奇怪的 bug,于是搜索。
从一个 stackoverflow 的问题得知这是一个已经确认的系统 bug( 官网链接:https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1242376/ ) ,出现在 Ubuntu 低于15.04的各个版本上,这个问题时间是2013年,竟然现在还没有通过修改包来解决,最后一条评论( 2015-07-27)写到:
I have documented the workaround in the bug description. This bug presumably does not affect releases >= Vivid since it is related to upstart and Ubuntu runs systemd since Vivid.So marking Fix Released and creating a Trusty task in case someone can come up with a good fix for Trusty that can be SRU’d. Importance -> Medium as a workaround is available·····
status: Confirmed → Fix Released
importance: Undecided → Medium
意思就是说既然新版本不影响这 bug 就不重要了吗WTF?
完整的解决方案在 Github(https://github.com/AbhishekGhosh/Nginx-PHP5-FPM-Restart-Fix-on-Ubuntu)(全程使用 root 操作) :
这个 Github repo 的作者写到:
By default it never happens. Possibly after optimizing the www.conf file, somehow it activate this.
在默认环境下这个错误不会出现,错误可能是因为你修改了www.conf配置文件。
如果你不想保留现有的 PHP 环境相关配置,可以直接重装:
apt-get purge php5-fpm && apt-get install php5-fpm
如果你想对 php-fpm 配置进行修改,先编辑 /etc/init/php-fpm.conf
解除这行的注释: reload signal USR2
备份现有的 init.d 文件:
mv /etc/init.d/php5-fpm ~/php5-fpm.bak
从 Github 导入新的 init.d 文件:
curl -L https://raw.githubusercontent.com/AbhishekGhosh/Nginx-PHP5-FPM-Restart-Fix-on-Ubuntu/master/php5-fpm > /etc/init.d/php5-fpm
chmod +x /etc/init.d/php5-fpm
Github 原文说这时候重启服务即可,而我的情况是这时候问题依旧,尝试强杀进程:
pkill php5-fpm
再尝试使用 service 启动 php5-fpm ,再重启,正常了。