我创build了一个目录来存储PHP 5 FPM的套接字文件: sudo mkdir /var/run/php-fpm 。 它由root:root以及核心PHP FPM进程拥有。
当PHP FPM启动时,它为该目录内的每个池创build套接字文件,并且nginx使用它们进行通信。
但是,当我重新启动我的机器( sudo reboot )后,此目录在重新启动后不见了,PHP FPM无法启动,导致它无法在丢失的目录中创build套接字文件。
可能是什么问题? 我如何debugging它?
我正在使用最新的Ubuntu Server 14.04。
Ubuntu的当前版本使用所谓的启动configuration来运行服务。 关于这方面的更多信息可以在这里find。
所有的启动脚本都位于/etc/init目录中。 不要将它与/etc/init.d目录中的旧init脚本混淆。
正如@Rhim在他的回答中所说的那样, /var/run是一个临时挂载的文件系统,每次重新引导后都会重新创build ,所以更改不会被保留。 所以为了有一个自定义的套接字文件目录,你将不得不每次创build它。 添加这种function的最佳位置是位于/etc/init/php5-fpm.conf PHP FPM的新贵configuration。
这里是这个configuration的修改版本:
# 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节已经被用来检查PHP FPMconfiguration文件,所以我已经将它转换为一个脚本部分,并添加了我自己的命令来创build套接字文件的checkconf然后调用checkconf 。
用这个脚本它应该可以正常工作。 为了控制服务的状态使用service命令,像这样: service php5-fpm start , service php5-fpm restart等
我希望这会帮助别人。 干杯!
我认为在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.
添加到启动脚本,创build一个目录或更改pid文件的目录。
但我很惊讶,它不是在重新启动后自动创build的。