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

Сигналы PHP-FPM для ротации журнала error_log пула

Я перемещаю все задачи ротации журналов моего сервера для logrotate. На сервере есть несколько пулов PHP-FPM, каждый из которых настроен с отдельным error_log директива.

Рецепт logrotate для журналов довольно прост:

/var/log/php/*.log
{
        rotate 7
        daily
        missingok
        notifempty
        delaycompress
        compress
        dateext
        sharedscripts
        postrotate
                # Need for signaling the php-fpm process?
        endscript
}

Должен ли я послать какой-нибудь сигнал пулам php-fpm, чтобы поймать новые дескрипторы для файлов error_log (в postrotate сценарий)? Если да, то какой сигнал?

Помимо обычных сигналов, PHP-FPM распознает два «определенных пользователем» сигнала: SIGUSR1 и SIGUSR2.

  • SIGUSR1 - будет циклически перебирать файлы журнала
  • SIGUSR2 - плавная перезагрузка всех рабочих + перезагрузка fpm conf / binary

Для ротации файлов журнала хорошо подходит SIGUSR1. С конкретной ссылкой на ваш сценарий пример конфигурации logrotate подробно описан на эта страница. Сигнал передается следующим образом:

kill -USR1 `cat /path/to/php-fpm.pid`

Сигналы PHP-FPM определены по адресу: http://php-fpm.org/wiki/Documentation

Да, вам нужно отправить этот сигнал, но вместо того, чтобы делать это вручную, лучше добавить вызов в следующий скрипт:

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