我想知道轮换 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
问 1. 有没有更好的方法来避免潜在的日志数据丢失或需要完全重启?
细节:
- 系统:CentOS 6x
- 版本:pdns-3.3.1 - 相关选项
/etc/pdns/pdns.conf
...
log-dns-queries=yes
loglevel=5
logging-facility=6
...
编辑:
这很奇怪,但我还注意到它在logging-facility
系统日志默认状态下运行良好/var/log/messages
。
答案1
PowerDNS 会将日志记录到本地系统日志中,因此当您轮换日志文件时,您需要向系统日志守护程序发送 HUP 信号。您根本不需要向 PowerDNS 发送信号。
例如(取自 rsyslog 的 logrotate 配置):
/var/log/pdns/*.log {
sharedscripts
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}