进一步阅读

进一步阅读

是否存在一个命令可以执行以下操作:

someprogram | tee --limit=1MB afile

其中“afile”将包含“someprogram”的最新 1 MB 输出?

答案1

正是如此,可能不是。一旦它预热并填充文件,它将重写 1MiB-旧数据的字节,将它们沿着文件打乱,对于每个添加到缓冲区末尾的新数据字节。这并不完全是一种理想的机制,而且在写入文件时读取文件很容易出现“撕裂”问题。

接近于此,存在许多命令。将文件数量增加到 2 个,即当前文件及其前一个文件,以便在任何给定时间都有 1MiB 到 2MiB 的最新输出,并且输出一旦写入就不会被复制;并且您拥有一大堆 daemontools 系列日志程序通过设计完成的功能。从本质上讲,它们正是这种“tee加”。

  • 与丹·伯恩斯坦的multilog来自 daemontools 和 Bruce Guenter 的multilog来自 daemontools-encore:

    某个程序 |多重日志 n2 s1048576 ./logdir/
  • 与洛朗·贝尔科特一起s6-log从 s6 开始:

    某个程序 | s6-log n2 s1048576 ./logdir/
  • 格里特·佩普的svlogd来自 runit 的配置文件如下n2 s1048576

    某个程序 | svlogd ./logdir/
  • 韦恩·马歇尔的tinylog来自罪犯:

    某个程序 | tinylog -k 1 -s 1048576 ./logdir/
  • 和我的cyclog来自诺什:

    某个程序 | cyclog --最大文件大小 1048576 --最大总大小 1048576 ./logdir/

进一步阅读

答案2

软件包中apache2-utils存在名为 的实用程序rotatelogs,它完全满足您的要求。

概要:

旋转日志 [ -l ] [ -L链接名] [-p程序] [ -f ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n文件数量] 日志档案旋转时间|文件大小(B|K|M|G) [抵消]

您可以阅读完整手册这个链接

相关内容