我在使用 logrotate 时遇到了一些麻烦,它似乎没有按照我的指示去做。
环境:
- 森托斯 6.4
- 对数旋转 3.7.8
我的 /etc/logrotate.conf 文件具有以下内容:
# rotate log files weekly
daily
# keep 4 weeks worth of backlogs
rotate 30
# create new (empty) log files after rotating old ones
create
# use date as a suffix of the rotated file
# dateext
# uncomment this if you want your log files compressed
compress
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
compressext .bz2
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
我遇到问题的 logrotate 文件是这样的(对于 elasticsearch,位于 /etc/logrotate.d/elasticsearch):
/var/log/elasticsearch/*.log {
missingok
notifempty
copytruncate
postrotate
rm -rf /var/log/elasticsearch/*.log.$(date +%Y)*
size 1k
rotate 7
daily
}
首先,它不尊重我的rotate 7
配置,当我运行时logrotate -d /etc/logrotate.conf
,我得到一行内容:
旋转日志 /var/log/elasticsearch/gravity-es-prod02.log,log->rotateCount 为 30
...还有一堆声明说它正在轮换 30 个不同的 *.bz2 文件。
gravity-es-prod02.log.2015-12-01
其次,尽管没有启用 dateext,但我仍然以指定的日志文件(以及自上次手动清理以来的任何先前日期)结束。这些也没有被清理干净,所以我添加了 postrotate 行来手动清理它,但显然这也不能正常工作。
编辑 运行 logrotate 脚本的 cron 文件非常标准:
#> cat /etc/cron.daily/logrotate
#!/bin/sh
/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
/usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0
答案1
我在您提供的脚本中发现了一个错误(缺少结束脚本):
postrotate
rm -rf /var/log/elasticsearch/*.log.$(date +%Y)*
endscript
我相信这部分失败并以某种方式应用此日志模式的全局设置。