Ubuntu Server 重启后,PHP 5 FPM 套接字文件的目录被删除

Ubuntu Server 重启后,PHP 5 FPM 套接字文件的目录被删除

我创建了一个目录来存储 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-startstanza 已经用于检查 PHP FPM 配置文件,因此我将其转换为脚本部分,并在调用之前添加了我自己的命令来创建套接字文件的目录checkconf

使用此脚本应该可以正常工作。为了控制服务的状态,请使用service如下命令:service php5-fpm startservice 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 文件的目录。
但令我惊讶的是,它不会在重启后自动创建。

相关内容