是否存在可以执行以下操作的命令:
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