How can I get logrotate dateext to reflect the log date rather than the rotation date?
Solution 1:
Added in 3.8.0 (although looking at the svn history, it looks like it was actually added in 3.7.9):
http://svn.fedorahosted.org/svn/logrotate/tags/r3-8-0/CHANGES
- added "dateyesterday" option (see man page)
Solution 2:
if logrotate in your distrib doesn't have 'dateyesterday' option yet, you can use script like the following:
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
Notes:
- script will work right only in case of 'daily' option
- if operating on multiple files, wrap the code block in "for LOGFILE in $@" loop.
- sequence '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' is the logrotate's default glob pattern, see description of dateext option of logrotate man.