Я перемещаю все задачи ротации журналов моего сервера для 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. С конкретной ссылкой на ваш сценарий пример конфигурации 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
...