我的Apache的logrotateconfiguration如下所示:
/var/log/http/*log { monthly dateext dateformat .%Y.%m [... rest stripped for brevity ...] }
这个效果很好,除了旋转文件名的date比日志实际覆盖的时间晚一个周期,例如error_log.2012.09
涵盖2012-08-01到2012-08-31。
我意识到Apache还有其他的select(例如cronolog),但是我还有一些其他的日志,我也需要旋转,而logrotate实际上正是我除了这个问题之外所需要的东西。
有没有办法让logrotate使用date偏移量 – 或者,甚至更好,找出前一个时间段 – 当生成旋转的文件名?
在3.8.0中添加(虽然看svn的历史,它看起来像它实际上添加在3.7.9):
http://svn.fedorahosted.org/svn/logrotate/tags/r3-8-0/CHANGES
- added "dateyesterday" option (see man page)
如果您的distrib中的logrotate没有“dateyesterday”选项,则可以使用如下所示的脚本:
LOGFILE="$1" LOGMTIME="$(env LC_ALL='C' stat $LOGFILE |awk '/^Modify/{print $2}')" LOGSTART=$(( $(date +%Y%m%d -d "${LOGMTIME}") - 1 )) mv $LOGFILE ${LOGFILE%-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]}-$LOGSTART
笔记: