После установки php-fpm, иногда бывает удобно хранить все его сокеты в отдельной папке, например /var/run/php5-fpm, но если вручную создать такую папку, то после перезагрузки система ее удаляет, а в логе можно увидеть типа:
Для решения данной проблемы нужно отредактировать init-скрипт /etc/init.d/php5-fpm, добавив вверху, после переменной SCRIPTNAME строчку:
Теперь, при запуске php-fpm демона, каталог с сокетами в /var/run будет создаваться автоматически.
UPDATE: 15.10.2014
Для тех кто пользуется upstart, приводим файл /etc/init/php5-fpm.conf к такому виду:
Логи запуска через upstart можно подглядеть в dmesg, /var/log/upstart/php5-fpm.log. P.S. команды service php5-fpm start будут обработаны upstart, а init.d скрипты проигнорированы, так вот запутано все в Ubuntu.
Ссылки по теме:
1. Opennet.ru: В Fedora и других Linux-дистрибутивах появится директория /run
2. Создание директории /var/run/php5-fpm после перезагрузки
ERROR: unable to bind listening socket for address '/var/run/php5-fpm/default.sock': No such file or directory.Это связано с тем, что /var/run монтируется с опцией --bind из /run [1], где файловая система tmpfs, логично, что после перезагрузки все, что создавал пользователь - удаляется! Но не проблема, значит перед запуском демона, нужно проверять, существует ли каталог, если нет, то создавать.
Для решения данной проблемы нужно отредактировать init-скрипт /etc/init.d/php5-fpm, добавив вверху, после переменной SCRIPTNAME строчку:
SOCKETDIR=/var/run/$NAMEА затем, под "do_start() {" добавить еще одну строчку:
[ -d $SOCKETDIR ] || install -m 777 -o www-data -g root -d $SOCKETDIR-m 777 я указал намеренно, т.к. у меня fpm пулы запускаются от разных uid:gid, если у вас все пулы работают от 1 пользователя, то можете указать -m 755.
Теперь, при запуске php-fpm демона, каталог с сокетами в /var/run будет создаваться автоматически.
UPDATE: 15.10.2014
Для тех кто пользуется upstart, приводим файл /etc/init/php5-fpm.conf к такому виду:
# php5-fpm - The PHP FastCGI Process Manager description "The PHP FastCGI Process Manager" author "Ondřej SurýИзменился блок pre-start, теперь там script, в котором собственно и стоит проверка каталога /var/run/php5-fpm, идея подсмотрена в /etc/init/mysql.conf. Для применения изменений в upstart скрипты, необходимо выполнить команды:" 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 [ -d /var/run/php5-fpm ] || install -m 777 -o www-data -g root -d /var/run/php5-fpm /usr/lib/php5/php5-fpm-checkconf end script respawn exec /usr/sbin/php5-fpm --nodaemonize --fpm-config /etc/php5/fpm/php-fpm.conf
root@Ubuntu# initctl reload-configuration root@Ubuntu# initctl stop php5-fpm initctl: Unknown instance: root@Ubuntu# initctl start php5-fpm php5-fpm start/running, process 18467Обязательно stop (если был запущен демон php5-fpm), а затем start. Если демон php-fpm не был запущен, то restart скажет вам "initctl: Unknown instance:" и не запустит демона. Так что лучше сперва stop и затем start - это избавит от лишних раздумий, как устроена система upstart и почему restart не запускает демона.
Логи запуска через upstart можно подглядеть в dmesg, /var/log/upstart/php5-fpm.log. P.S. команды service php5-fpm start будут обработаны upstart, а init.d скрипты проигнорированы, так вот запутано все в Ubuntu.
Ссылки по теме:
1. Opennet.ru: В Fedora и других Linux-дистрибутивах появится директория /run
2. Создание директории /var/run/php5-fpm после перезагрузки
1 комментарий:
Не знаю прошло ли предыдущее сообщение, в общем спасибо, то что надо.
Отправить комментарий