我已经创建了一个目录来存储
PHP 5 FPM的套接字文件:sudo mkdir / var / run / PHP-fpm.它由root:root以及核心PHP FPM进程拥有.
当PHP FPM启动时,它会为此目录中的每个池创建套接字文件,Nginx使用它们进行通信.
但是,当我重新启动我的机器(sudo reboot)时,此目录在重新启动后消失,并且PHP FPM无法启动,导致它无法在丢失的目录中创建套接字文件.
可能是什么问题?我该如何调试呢?
我正在使用最新的Ubuntu Server 14.04.
当前版本的Ubuntu正在使用所谓的up-start configs来运行服务.有关此产品的更多信息,请访问
here.
所有上行脚本都位于/ etc / init目录中.不要将它与/etc/init.d目录中的旧init脚本混淆.
正如@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ý <ondrej@debian.org>" 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之前创建socket文件的目录.
使用此脚本它应该可以正常工作.为了控制服务的状态,使用如下服务命令:service PHP5-fpm start,service PHP5-fpm restart等.
我希望它会帮助某人.干杯!