检查和测试 logrotate 配置的更简单方法

Posted

技术标签:

【中文标题】检查和测试 logrotate 配置的更简单方法【英文标题】:Easier way to check and test logrotate configuration 【发布时间】:2020-07-21 01:27:18 【问题描述】:

我正在尝试设置 logrotation 以每天轮换日志,持续 14 天。在 postst 轮换中,它将调用一个单独的脚本来 tar 任何超过 10 天的日志。超过 14 天的文件将被删除。

到目前为止,轮换似乎工作正常,但鉴于此所需的时间尺度,我在测试时遇到了一些麻烦。有没有什么方法可以不用等待 14 天来测试这个设置,因为那不是很实用。

另外,这是我的配置和 tar 脚本。考虑到我的要求,这似乎有什么问题吗?

logrotate.conf

/home/user1/services/logs/*/*.log
# Rotate logs daily
daily
copytruncate
missingok
notifempty
# Keep 14 days worth of backlogs
rotate 14
maxage 14

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
dateext
dateformat .%Y-%m-%d

# compress your logs
nocompress

#postrotate scripts to tar logs that are too old.
postrotate
    /home/user1/service/logrotate/archive.sh
endscript


存档.sh:

#!/bin/bash

rotateDate=[0-9]4-[0-9]2-[0-9]2

shopt -s nullglob

for file in $HOME/services/logs/*/*.log.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do
    log=$(basename "$file")
    find . -type f -mtime +10 | tar -zcvf "$file.tar" "$log"
done

编辑:在夜间运行我的脚本后,我注意到archive.sh 无法正常工作。我没有找到旧文件并对其进行去皮重,而是看到昨晚轮换的日志文件已去皮重。

我应该有:

test.log
test.log.2020-04-09
test.log.2020-04-08

然后在文件 10 天之前看不到任何焦油。

相反,我有:

test.log
test.log.2020-04-09
test.log.2020-04-09.tar
test.log.2020-04-08
test.log.2020-04-08.tar

【问题讨论】:

您不能将时间缩短到 14 小时,然后在这段时间内进行测试吗? 【参考方案1】:

我对 logrotate.conf 了解不多。


但是对于您的第二个问题: 请查看那些压缩的日志文件,它们是否是正确的,是否包含所有内容。

你现在做的是:

对于与您的 glob 表达式匹配的每个 $file

搜索所有超过 10 天的文件(不仅仅是$file) 丢弃结果并调用tar -zcvf "$file.tar" "$log"

所以你应该在你的find 命令中包含文件名,并使用 find 的输出作为tar 的参数(例如使用xargs):

for file in $HOME/services/logs/*/*.log.[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]; do
    log=$(basename "$file")
    find . -iname "$file" -type f -mtime +10 | xargs tar -zcvf "$file.tar"
done

如果文件名中有空格,请考虑选项 -print0 对应 find-0 对应 xargs

或者没有xargs 使用参数-T -tar

find . -iname "$file" -type f -mtime +10 -print0 | tar -zcvf "$file.tar" --null -T  -

但具体参数可能取决于您的 tar 版本:How can I build a tar from stdin?

【讨论】:

以上是关于检查和测试 logrotate 配置的更简单方法的主要内容,如果未能解决你的问题,请参考以下文章

Android 高亮View引导页的更简解决方案-Curtain

linux logrotate 配置说明

linux logrotate 配置说明

多个 if-else 测试的更简单方法

日志管理工具-logrotate

日志管理工具之logrotate