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


8

我的日志格式如下:YYYYMMDD

我想压缩旧日志(先于当前日期),然后再将其移至其他目录。

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

Answers:


4

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

#!/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的格式移动前几天(如果有的话)的所有日志。


4
是的,但这并不能真正回答我的问题。我的问题是我是否可以为此使用logrotate。
西蒙·托特

@Let_Me_Be-我认为答案中隐含了它。不,logrotate不能完全满足您的要求。也就是说,您不能仅匹配YYYYMMDD文件。否则,你可以用接近nodateextolddircompress,和daily选项。
Unpythonic 2011年

3

如果您的日志文件名每次运行都相同,并且可以添加日期,则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复制并gzips到/logs/logarchive/sys.20120101.log.gz,保存一周的日志。


1
这不是答案。日志已经具有日期戳,并且有效地旋转了Let_Me_Be只是想对其进行压缩。我相信@jmtd是正确的。
安德鲁·洛里安'17

2

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

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.