Linux-固定行数的日志文件

发布于 2017-01-18 01:25:56 字数 165 浏览 1417 评论 6

在linux下需要一个这样文件,文件最多只能写入100行,写满后直接覆盖最老的数据。这个不知道能不能实现。
应用场景:
1. nohup ./loop > a.log
2. a.log 文件会无限增长,很快就把磁盘写满。 但程序loop异常时候又需要最近输出结果去判断问题。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(6

清晨说ぺ晚安 2017-08-12 10:17:22

我提供一个思路吧,把待插入的一行定个编号,比如说是number,number可以为1-100,101-200,......

当拿到一行新的数据时,比如说是102,那么通过计算102%100 = 2,我就知道我要把待插入的行替换原有编号为2的那一行。这样就能保证文件的行数是100行,数据填充满100行之后,就开始替换最老的那一行,也就是重新开始替换1,2,3,...

有点类似于循环数组。

清晨说ぺ晚安 2017-08-03 10:31:48

如果不考虑I/O操作对机器性能影响的话,我建议是用shell脚本定期(每天)对日志做个备份,定期对一定时间(一周)以前的日志清理操作。楼主非要求100行么?我看你担心的无非就是磁盘会写满问题,日志写一天也写不了太大吧?当然你也可以一个小时或者半个小时做下处理,时间你自己定(最小一分钟),用crontab就可以了。写个日志备份脚本,也就是先cp出来,再清空该日志:> a.log。

虐人心 2017-06-03 02:25:03

我觉得定时取出行尾记录的方法不太好,因为不能确定loop什么时间挂掉
提出我的想法。
1.对记录的日志进行分隔,比如每小时一个日志,可以用cronolog这个工具来处理。
2.因为只关心最后的记录日志,可以只保留最近一个小时的日志。加定时计划任务,如果记录日志的进程存在就删除当前小时之前的数据。

清晨说ぺ晚安 2017-05-24 14:13:13

可以写个脚本定期将日志取尾行数
比如

echo `tail -n100 /tmp/dummy.log` > /tmp/dummy.log

写成需要的脚本后在计划任务里面每隔一段时间执行一次即可
如要要集成在程序中,直接调用shell脚本即可,
不过,还是比较推荐使用 Linux 的 crond 来做计划任务。

祝好,
斑驳敬上

想挽留 2017-05-10 18:47:32

我觉得你可以改变一下log文件的格式,第一行是当前行数,之后是100行log数据,每次先读第一行,确定日志文件信息之后再决定是直接写入(行数<100)还是删除第一行在写入数据到最后一行(行数>100)。很简单的一个程序就能实现~~

泛泛之交 2017-02-22 04:42:38

推荐使用rotate工具,你问题关键是日志塞满了磁盘,而不是行数。

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文