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

logrotate вызывает простои php5-fpm

Я заметил, что один из наших серверов начинает возвращать ошибки сразу после запуска logrotate, то есть в журнале ошибок nginx я вижу:

[ошибка] 8501 # 0: * 118126869 recv () не удалось (104: сброс соединения одноранговым узлом) при чтении заголовка ответа из восходящего потока, клиент: xxx.yyy.zz.ww, сервер: www.test.com, запрос: "GET /index.php HTTP / 1.1 ", восходящий поток:" fastcgi: //127.0.0.1: 9011 ", хост:" www.test.com "

Я попытался добавить действие postrotate, которое могло бы корректно перезагрузить php, но ошибка все еще возникает, наш текущий logrotate выглядит следующим образом:

/var/log/php5-fpm.log {
        daily
        missingok
        rotate 52
        compress
        delaycompress
        notifempty
        create 644 root root
        postrotate
                [ ! -f /var/run/php5-fpm.pid ] || kill -USR2 `cat /var/run/php5-fpm.pid`
        endscript
}

Конфигурация PHP выглядит следующим образом:

[www-9011]

user = www-data
group = www-data
listen = 127.0.0.1:9011
listen.backlog = 65535
pm = ondemand
pm.max_children = 50
pm.process_idle_timeout = 10s;
pm.max_requests = 500
rlimit_files = 16384
chdir = /
catch_workers_output = no
php_admin_value[error_log] = /var/log/fpm-php.www.log
php_admin_flag[log_errors] = on

Мы работаем на ubuntu 12.04 и php 5.3.10

Вместо этого отправьте USR1

https://github.com/php/php-src/blob/b7a7b1a624c97945c0aaa49d46ae996fc0bdb6bc/sapi/fpm/fpm/fpm_events.c#L94

Исходный код показывает, что это специально для ротации файлов, я знаю, что Ubuntu 14.04 не очень хорошо справлялся с перезагрузкой fpm (USR2), я предполагаю, что то же самое и для более старых версий.

Так что смени на

postrotate
                [ ! -f /var/run/php5-fpm.pid ] || kill -USR1 `cat /var/run/php5-fpm.pid`
endscript

просто повернуть бревна

Это старый вопрос, на который пока нет ответа. Поэтому я стараюсь дать ответ тем, кто все еще ищет: logrotate файл конфигурации говорит, что после выполнения ротации logrotate убьет php-fpm обработать:

        postrotate
                [ ! -f /var/run/php5-fpm.pid ] || kill -USR2 `cat /var/run/php5-fpm.pid`

Текущая конфигурация по умолчанию в репозиториях Ubuntu 16 - вызвать функцию php5-fpm-reopenlogs который предназначен для ротации файлов журнала:

        postrotate
                /usr/lib/php5/php5-fpm-reopenlogs

Аналогично PHP 7:

        postrotate
                /usr/lib/php/php7.0-fpm-reopenlogs

Вот полный /etc/logrotate.d/php5-fpm показать это postrotate в контексте:

/var/log/php5-fpm.log {
        rotate 12
        weekly
        missingok
        notifempty
        compress
        delaycompress
        postrotate
                # invoke-rc.d php5-fpm reload > /dev/null
                /usr/lib/php5/php5-fpm-reopenlogs
        endscript
}