我有一个程序会在标准输出上生成大量日志。实际上我并不关心日志,但我确实想知道程序完成或崩溃时最后 1000 行左右的内容。
我想要介于“tail -f”和“> log”之间的某个命令。也就是说,我想要监视输出并将其放入日志文件中,但连续只将最后 1000 行保存到文件中。如果我执行“tail -f >log”,这会连续保存所有内容,日志文件会变得太大。如果我执行“tail -f”,我可以监视输出的尾部。
我想要的是理论上可以做到的事情,
$ program >log &
$ while true; do sleep 1s; tail -n1000 log > saved_log; done
但log
由于尺寸过大,中间没有生产。有这样的工具吗?
最好使用标准 Unix 工具包,但我也愿意接受建议。
答案1
我想要一个更好的答案,但与此同时,我编写了这个糟糕的 Python 脚本。一定有某种标准可以做到这一点...
$ cat proposed/box-restart/loglast1000.py
#!/usr/bin/env python
from __future__ import print_function
import sys, time
fn = sys.argv[1]
last1000 = []
def output_last1000():
with file(fn,'w') as output:
for l in last1000:
print(l, end='', file=output)
t = time.time()
for line in sys.stdin:
last1000.append(line)
if len(last1000) > 2000:
last1000 = last1000[1000:]
if time.time() - t > 0.5:
output_last1000()
output_last1000()