Logrotate
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
為 system log可以正常工作/var/log/messages
。
PowerDNS 將日誌記錄到本地 syslog,因此它是您在輪換日誌文件時需要向其發送 HUP 信號的 syslog 守護程序。您根本不需要向 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 }