我如何获得logrotate dateext来反映日志date而不是旋转date?

我的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 

笔记:

  1. 只有在“每日”选项的情况下,脚本才能正常工作
  2. 如果对多个文件进行操作,则将代码块包装在“for $ LOGFILE ”循环中。
  3. 序列“ – [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9] [0-9]是logrotate的默认全局模式,请参阅logrotate man的dateext选项的说明。