Интересно, какой рекомендуемый способ ротации файлов журналов PowerDNS? Я добавил в logrotate следующую запись:
# cat /etc/logrotate.d/pdns
/var/log/pdns/*.log {
daily
rotate 7
compress
delaycompress
}
- но похоже, что PowerDNS не принимает сигналы от logrotate и ссылается на старый файл журнала:
# lsof | grep "pdns.log*"
rsyslogd 17776 root 5w REG 253,0 88273 785738 /var/log/pdns/pdns.log-20140728
Доступны два метода:
1. В copytruncate
вариант, но затем появляется предупреждение о том, что некоторые данные журнала могут быть потеряны.
copytruncate
Truncate the original log file in place after creating a copy,
instead of moving the old log file and optionally creating a
new one.
2. Программа postrotate
сценарий. Кажется, что требуется полный перезапуск, потому что перезагрузка (цикл pdns_control) и kill HUP
также игнорируются - с помощью этого метода PowerDNS будет недоступен на короткое время.
postrotate
/sbin/service pdns reload > /dev/null 2>/dev/null || true
endscript
Q1. Есть ли лучший способ избежать потери данных журнала или необходимости полностью перезапустить?
Подробности:
- Система: CentOS 6x
- Версия: pdns-3.3.1 - связанные параметры
/etc/pdns/pdns.conf
...
log-dns-queries=yes
loglevel=5
logging-facility=6
...
Редактировать:
Странно, но еще заметил, что по умолчанию все работает нормально. logging-facility
в системный журнал /var/log/messages
.
PowerDNS ведет журнал в локальном системном журнале, так что это демон системного журнала, которому вы должны отправлять сигнал HUP при ротации файлов журнала. Вам вообще не нужно сигнализировать о PowerDNS.
Например (взято из конфигурации logrotate для rsyslog):
/var/log/pdns/*.log {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}