我创建了一个目录来存储 PHP 5 FPM 的套接字文件:sudo mkdir /var/run/php-fpm
。它由root:root
核心 PHP FPM 进程所有。
当 PHP FPM 启动时,它会为该目录内的每个池创建套接字文件,并且 nginx 使用它们进行通信。
但是,当我重新启动机器(sudo reboot
)后该目录就消失了,并且 PHP FPM 无法启动,因为它无法在丢失的目录内创建套接字文件。
这可能是什么问题?我该如何调试它?
我正在使用最新的 Ubuntu Server 14.04。
答案1
Ubuntu 当前版本使用所谓的暴发户配置运行服务。有关此内容的更多信息,请参见这里。
所有启动脚本都位于该/etc/init
目录中。不要将其与/etc/init.d
目录中的旧初始化脚本混淆。
正如 @Rhim 在他的回答中所述,/var/run
是一个临时挂载的文件系统,即重新创建每次重启后,更改不会保留在其中。因此,为了拥有套接字文件的自定义目录,您每次都必须创建它。添加此类功能的最佳位置是位于以下位置的 PHP FPM 的 upstart 配置:/etc/init/php5-fpm.conf
。
这是该配置的修改版本:
# php5-fpm - The PHP FastCGI Process Manager
description "The PHP FastCGI Process Manager"
author "Ondřej Surý <[email protected]>"
start on runlevel [2345]
stop on runlevel [016]
# Precise upstart does not support reload signal, and thus rejects the
# job. We'd rather start the daemon, instead of forcing users to
# reboot https://bugs.launchpad.net/ubuntu/+source/php5/+bug/1272788
#
# reload signal USR2
pre-start script
mkdir -p /var/run/php-fpm
/usr/lib/php5/php5-fpm-checkconf
end script
respawn
exec /usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf
pre-start
stanza 已经用于检查 PHP FPM 配置文件,因此我将其转换为脚本部分,并在调用之前添加了我自己的命令来创建套接字文件的目录checkconf
。
使用此脚本应该可以正常工作。为了控制服务的状态,请使用service
如下命令:service php5-fpm start
等service php5-fpm restart
。
希望它能对某些人有所帮助。干杯!
答案2
我认为在 Ubuntu 中也是如此!
cat /etc/redhat-release
Fedora release 20 (Heisenbug)
df -h /run
Filesystem Size Used Avail Use% Mounted on
tmpfs 3.9G 904K 3.9G 1% /run
ls -la /var | grep run
lrwxrwxrwx. 1 root root 6 Dec 28 2013 run -> ../run
This directory is mounted as tmpfs.
添加到启动脚本,创建目录或更改 pid 文件的目录。
但令我惊讶的是,它不会在重启后自动创建。