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

Ротация журнала PDNS

Интересно, какой рекомендуемый способ ротации файлов журналов 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
}