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

someprogram | tee --limit=1MB afile

因此,“afile”将包含“someprogram”的最新1 MB输出?

 

确切地说,可能不是.一旦它已经预热并填充文件,它将重写1MiB-N字节的旧数据,以便将它们添加到缓冲区末尾的每N字节新数据沿着文件进行混洗.这不是一个理想的机制,而且在写入文件时读取文件会容易出现“撕裂”问题.

接近这一点,存在许多命令.将文件数量提高到2,即当前文件及其前一个文件,以便在任何给定时间,文件数量在最近输出的1MiB和2MiB之间,输出一旦被写入就不会被复制;并且你有一大堆daemontools-family日志程序通过设计完成的事情.从本质上讲,它们就是这种“T恤加”.

> Dan Bernstein来自daemontools的multilog和来自daemontools-encore的Bruce Guenter的multilog

someprogram | multilog n2 s1048576 ./logdir/

>来自s6的Laurent Bercot的s6-log

someprogram | s6-log n2 s1048576 ./logdir/

>来自runit的Gerrit Pape的svlogd,配置文件为n2 s1048576:

someprogram | svlogd ./logdir/

> Wayne Marshall的tinylog来自perp:

someprogram | tinylog -k 1 -s 1048576 ./logdir/

>来自nosh的cyclog

someprogram | cyclog --max-file-size 1048576 --max-total-size 1048576 ./logdir/

进一步阅读

> Jonathan de Boyne Pollard(2015年). “Logging”. daemontools家族.经常给出答案.
> Jonathan de Boyne Pollard(2017年). Don’t use logrotate or newsyslog in this century..经常给出答案.
https://unix.stackexchange.com/a/326166/5132