Я создал каталог для хранения файлов сокетов для 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 использует так называемые выскочка конфиги для запуска сервисов. Более подробную информацию об этом можно найти Вот.
Все сценарии запуска находятся в папке /etc/init
каталог. Не путайте его со старыми скриптами инициализации в /etc/init.d
каталог.
Как заявил @Rhim в своем ответе, /var/run
это временная смонтированная файловая система, то есть воссозданный после каждой перезагрузки, поэтому изменения в нем не сохраняются. Поэтому, чтобы иметь собственный каталог для файлов сокетов, вам придется каждый раз создавать его. Лучшее место для добавления такой функциональности - это конфигурация выскочки для PHP FPM, расположенная в: /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
.
С этим скриптом все должно работать нормально. Для контроля состояния сервиса используйте 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.
Добавьте в сценарий запуска, создайте каталог или измените каталог для файлов pid.
Но меня удивляет, что он не создается автоматически после перезагрузки.