shell 脚本从日志文件中删除 6 个月前的日志

shell 脚本从日志文件中删除 6 个月前的日志

我有一个大小为 6.2 GB 的日志文件,该进程正在使用它,并且它不断将日志写入此文件。现在我不想轮换日志,但我确实想清理此日志文件。我想从此文件中删除超过 6 个月的日志。是否可以使用 shell 脚本读取日志文件并删除超过 6 个月的日志?

以下是日志格式

10.0.3.xx - - [17/Jun/2016:14:21:59 +0000] "GET /visible_topics HTTP/1.1" 200 581 "-" "help/97a1dd7eb981421b9719adde381560a78bed0b66 (ip-10-0-3-xxx; user1; 4411) ruby/2.3.0 (0; x86_64-linux)" 

答案1

解决方案确实是使用logrotate:它工作得很好,而且它还可以压缩旋转的日志。

如果您确实不想使用 logrotate,您必须手动将日志文件的相关部分 cat/copy 到新文件中,然后删除旧文件。

如果没有日志格式的详细示例,就不可能给您提供有关所需 shell 命令的任何建议。

无论如何,您确实应该使用 logrotate。

答案2

我想从这个文件中删除超过 6 个月的日志。

我不清楚你的意思,但如果我不得不猜的话,你想删除日志文件条目从这个文件中删除超过 6 个月的日志。如果是这种情况,这是可以做到的,但这是在 *nix 系统上管理日志的一种相当特别的方法。

您要做的(如果我的假设正确)是解析该文件中的每一行并确定时间戳,以测试输入日期是否在您当前的 6 个月窗口内。根据时间戳的通过/失败,您将写出没有“旧”条目的新日志文件。您可以使用诸如和之类的 shell 工具来grep实现headtail一点,但为了提高性能,您可能需要考虑专门针对您的需要定制的自定义编译 C 应用程序。

我不知道这个日志文件是在哪种硬件上运行的,但这个日志文件的庞大规模(6.8 GB)很可能会在解析旧条目和写入新条目时造成严重的性能瓶颈。在大多数情况下,当事情变得如此麻烦时,通常表明该流程需要审查。不过这条规则也有例外情况。祝你好运。

相关内容