我可以使用 logrotate 压缩每日(指定日期)日志吗?

我可以使用 logrotate 压缩每日(指定日期)日志吗?

我的日志格式如下:YYYYMMDD

我想压缩旧日志(比当前日期更早),然后可能将它们移动到不同的目录。

我可以在 logrotate 中执行此操作,还是必须在 cron 中使用自定义脚本?

答案1

如果您的日志文件名每次运行时都相同并且您可以添加日期,则 logrotate 可以使用 olddir 来完成此操作。如果您的日志文件名发生更改,即 YYYYMMDD,则 logrotate 不会为您执行此操作。

# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive

/logs/sys.log {
    rotate 7
    daily
}

将 /logs/sys.log 复制并 gzip 至 /logs/logarchive/sys.20120101.log.gz,保留一周的日志。

答案2

这是一个快速脚本,可以满足您的需要:

#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')

[ -d $OLDLOGS ] || mkdir -p $OLDLOGS

cd $LOGDIR

for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
    [ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz 
done

使脚本可执行:

$ chmod +x /where/you/put/this/script

crontab 条目将如下所示:

30 0 * * * /where/you/put/this/script

只需调整LOGDIROLDLOGDIR。中午 12:30,它将以 YYYYMMDD 格式移动前几天(以及更早的日期,如果有)的所有日志。

答案3

logrotate本身并不这样做。我建议编写一个补充脚本并通过logrotate使用postrotate配置中的选项来调用它。

相关内容