При установке php-fpm под Ubuntu 14.04 обнаружились проблемы с логами, не работала ротация, а так же не работал reload демона, демон завершал master процесс, при этом оставляя свои дочерние процессы, в следствие чего дальнейшая работа с php-fpm становилась невозможной, без ручной остановки каждого процесса php-fpm и последующим запуском, в общем надоело это безобразие, решил навести порядок.
Создаем папку для логов:
Затем переложим лог ошибок php-fpm в созданную только что папку с логами, для этого в файле: /etc/php5/fpm/php-fpm.conf:
Теперь решим проблему с reload и с удобным хранением php-fpm пулов приводим файл /etc/init/php5-fpm.conf к такому виду:
Итак после всего этого:
1. Ubuntu php5-fpm throws unknown instance on reload
2. Автоматическое создание директории /var/run/php5-fpm после перезагрузки
Создаем папку для логов:
mkdir /var/log/php5-fpm chmod 777 /var/log/php5-fpmchmod 777 сделан намерено, потому, что у меня php-fpm пулы запускаются от разных пользователей и от разных групп.
Затем переложим лог ошибок php-fpm в созданную только что папку с логами, для этого в файле: /etc/php5/fpm/php-fpm.conf:
error_log = /var/log/php5-fpm/error.logТеперь займемся правильной ротацией логов, файл /etc/logrotate.d/php5-fpm к такому виду:
/var/log/php5-fpm/*.log { rotate 5 # weekly # Не стоит терять логи, обнуляя файл раз в неделю! size 1k missingok notifempty compress delaycompress postrotate # http://stackoverflow.com/questions/19998526/ubuntu-php5-fpm-throws-unknown-instance-on-reload # The original reload command did never work #invoke-rc.d php5-fpm reopen-logs > /dev/null # Workaround for cases when the reload command fails for some reason service php5-fpm reload > /dev/null 2>&1 [ $? = 0 ] || ( service php5-fpm stop; killall php5-fpm; service php5-fpm start ) > /dev/null endscript }Так же рекомендую привести в порядок логи каждого пула например для пула www в файле /etc/php5/fpm/pool.d/www.conf:
access.log = /var/log/php5-fpm/$pool-access.log slowlog = /var/log/php5-fpm/$pool-slow.log php_admin_value[error_log] = /var/log/php5-fpm/$pool-error.log php_admin_flag[log_errors] = onОбратите внимание в имени файла используется переменная $pool, которая позволяет избавиться от рутины, прописывания имени пула в каждой строчке в каждом пуле.
Теперь решим проблему с reload и с удобным хранением php-fpm пулов приводим файл /etc/init/php5-fpm.conf к такому виду:
# php5-fpm - The PHP FastCGI Process Manager description "The PHP FastCGI Process Manager" author "Ondřej SurýДля применения изменений в upstart, необходимо выполнить команды, подробнее [ 2 ]:" 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В файле /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 я указал намеренно, как я уже упоминал ранее, у меня php-fpm пулы запускаются от разных uid:gid
Итак после всего этого:
- Сокеты пулов лежат в ожидаемом месте: /var/run/php5-fpm/
- Логи пулов, и лог ошибок демона php-fpm в: /var/log/php5-fpm/
- Логи не обнуляются раз в неделю, а ротация логов производится при достижении размера файла в 1Кб и главное она работает!
- Команда service php5-fpm reload теперь ничего не ломает и работает корректно.
1. Ubuntu php5-fpm throws unknown instance on reload
2. Автоматическое создание директории /var/run/php5-fpm после перезагрузки