Назад | Перейти на главную страницу

Каталог для файлов сокетов PHP 5 FPM удаляется после перезагрузки на сервере Ubuntu

Я создал каталог для хранения файлов сокетов для 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.
Но меня удивляет, что он не создается автоматически после перезагрузки.