При установке php-fpm
под Ubuntu 14.04 обнаружились проблемы с логами, не работала ротация, а так же не работал reload
демона, демон завершал master
процесс,
при этом оставляя свои дочерние процессы, в следствие чего дальнейшая работа с php-fpm
становилась невозможной, без ручной остановки каждого процесса php-fpm
и последующим запуском,
в общем надоело это безобразие, решил навести порядок.
Создаем папку для логов:
mkdir /var/log/php5-fpm
chmod 777 /var/log/php5-fpm
chmod 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ý <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
[ -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
Для применения изменений в upstart
, необходимо выполнить команды, подробнее [2]:
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
теперь ничего не ломает и работает корректно.
Ссылки по теме:
Comments
comments powered by Disqus