我想知道旋转 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
为 system log可以正常工作/var/log/messages
。
PowerDNS 将日志记录到本地 syslog,因此它是您在轮换日志文件时需要向其发送 HUP 信号的 syslog 守护进程。您根本不需要向 PowerDNS 发送信号。
例如(取自 rsyslog 的 logrotate 配置):