首页 > 解决方案 > 在 Linux 中频繁轮换日志时如何复制所需的日志文件内容

问题描述

假设一些日志以每个 50MB 的大小旋转。我做了'grep'一些字符串,我的字符串出现在日志文件 log_3 中,我想在它被旋转(重命名)到 log_4 之前复制 log_3 的内容。请建议如何在轮换之前备份 log_3 的内容。我只需要 log_3 的内容。我不想像我复制 log_3 (通过 cp -p log_3 log_3_backup)但是到那时日志已经轮换,现在 log_3_backup 包含 log_2 的内容。有什么办法可以避免这种情况。在一个自动化项目上工作,我需要一个解决方案。非常感谢您在高级的建议。您可以共享 python 或 shell 脚本。

标签: linuxbashcopylogrotate

解决方案


您可以获取重命名后不会更改的文件 inode 编号,然后按该名称引用文件

for f in *.log; do
    # get inode of file
    iname=$(ls -i $f)
    # test file contents for pattern presence 
    if grep -q 'some pattern' $f; then
        # the file contains the searched pattern, let's do something
        # find by inode number and move it
        find -inum $iname -exec mv {} {}.bak ';'
    fi
done

也许不再需要备份文件了,让我们再次 grep

find -inum $iname -print0 | xargs -r0 grep 'some pattern'

推荐阅读