Интересно, что рекомендуемый путь состоит в том, чтобы повернуть файлы журнала 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.
Например (взято из конфигурации лог-файлов для rsyslog):
/var/log/pdns/*.log {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}