在发生更改时捕获 logrotated 文件

在发生更改时捕获 logrotated 文件

这是一件相当特殊的事情,但我相信你可以帮助我。

我工作的环境会产生许多日志文件,这些日志文件主要来自运行的 Java 服务。当我们在该环境中执行 L&P 测试时,系统生成的文件通常比日志轮换保留的文件多。我现在需要一种方法在删除轮换日志之前将其存档,以便能够保留测试期间生成的所有日志。

但是我没有权限以任何方式更改日志轮换,所以我必须使用 bash 和基本的 UNIX 工具来执行此操作。此外,由于它是负载和性能测试,因此该解决方案在 CPU 和内存使用方面需要占用绝对小的空间。

首先,我考虑使用像 sha1sum 这样的哈希来保留哈希并保存所有已更改的文件,但生成和检查哈希似乎有点耗时且耗 CPU。

这个问题不一定是关于真正的代码,而是关于一个概念——尽管非常欢迎代码示例。

答案1

你应该使用信息传递。它位于 Debian 系列发行版的存储库中。如果您使用的是其他发行版,您可能可以从源代码进行编译。

概要

inoticoming [ 全局选项 ] 目录操作*

描述

Inoticoming 是一个守护进程,它使用 Linux 的 inotify 框架监视目录,一旦将特定名称的文件放入该目录就会触发操作。

您可以按如下方式使用它:

   inotcoming --initialsearch /directory/with/log/files --regexp \
   last_log_rotate_file10.txt mv {} /directory/to/store/log_rotate_files/`date +"%T"` \;

行动必须由 终止\;

选项--initialsearch守护进程启动后立即执行以下操作;

--正则表达式前面是一个正则表达式,需要满足要存储在其他地方的文件的名称;这里我假设您知道第 10 个 log_rotate_file 是系统将保留的最后一个文件;

然后命令如下,其中 {} 标识与--正则表达式选项,我假设您希望将文件移动到新目录,并使用反映操作时间的名称。您可以随意调整。

相关内容