检查和测试 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
:
$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 配置的更简单方法的主要内容,如果未能解决你的问题,请参考以下文章