是否存在一个命令可以执行以下操作:
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/
进一步阅读
- 乔纳森·德博因·波拉德 (2015)。 ”记录”。 守护进程工具家族。经常给出的答案。
- 乔纳森·德博因·波拉德 (2017)。在本世纪不要使用
logrotate
or 。newsyslog
。经常给出的答案。 - https://unix.stackexchange.com/a/326166/5132
答案2
软件包中apache2-utils
存在名为 的实用程序rotatelogs
,它完全满足您的要求。
概要:
旋转日志 [ -l ] [ -L链接名] [-p程序] [ -f ] [ -t ] [ -v ] [ -e ] [ -c ] [ -n文件数量] 日志档案旋转时间|文件大小(B|K|M|G) [抵消]
您可以阅读完整手册这个链接。