如何确定连续审核日志轮换中新关闭的文件?

如何确定连续审核日志轮换中新关闭的文件?

我试图找到确定何时创建第二个文件(符合匹配条件)的最佳方法。上下文是审核日志轮换。

给定一个每小时创建审核日志的目录,我需要awk对已关闭的审核日志执行解析脚本。我的意思是,每小时都会创建一个新的审核日志,并关闭旧的审核日志,其中包含最多一个小时的信息。新的日志文件将被保留,直到它也被关闭并创建一个新的日志文件。

我可以创建一个 bash shell 脚本并使用find /home/tomcat/openam/openam/log -name amAuthentication.* -mmin -60,然后通过一个crontab条目每 10 分钟执行一次,但我不知道如何编写其余部分。

我想脚本可以通过将该 find 的内容保存到临时文件开始,然后在每次crontab执行时比较新的 find 命令内容,当它发生更改时,使用临时文件作为 awk 脚本的输入。脚本完成后awk,将新查找的内容保存到文件中。


一位同事建议我使用老式的“粘性位”来标记已处理的文件。也许这就是继续下去的方法。

答案1

尝试使用inotifywait它:

inotifywait -e close_write /home/tomcat/openam/openam/log/CURRENT_OPENED_LOG_FILE

答案2

作为结束,这是我要使用的脚本的开始。它需要更多的工作来使其健壮并进行日志记录,但您应该了解总体思路。

#!/bin/sh

# This script should be executed from a crontab that executes every 5 or 10 minutes
# the find below looks for all log files that do NOT have the sticky bit set. 
# You can see the sticky bit with a "T" from a "ls -l". 
for x in `find /home/tomcat/openam/openam/log/ -name "log-*" -type f ! -perm -1000 -print`
do
    # Look for open files. For safety, log that we are skipping them
    if lsof | grep $x > /dev/null; then
        # create a log entry on why I'm not processing this file...
        echo $x " is open"
    else 
        # $x "is closed and not sticky"
        # run the awk scripts to process the file!
        echo $x " processing with awk..." 
        # Set the sticky bit to indicate we have processed this file
        chmod +t $x
    fi
done

相关内容