我的日志格式如下: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
只需调整LOGDIR
和OLDLOGDIR
。中午 12:30,它将以 YYYYMMDD 格式移动前几天(以及更早的日期,如果有)的所有日志。
答案3
logrotate
本身并不这样做。我建议编写一个补充脚本并通过logrotate
使用postrotate
配置中的选项来调用它。