首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何只检查自上次签入bash以来添加的行

如何只检查自上次签入bash以来添加的行
EN

Stack Overflow用户
提问于 2017-07-19 14:57:47
回答 1查看 118关注 0票数 1

我进退两难。我需要使用bash脚本检查日志文件。该脚本需要运行每5-10分钟(设置在crontab),并发送电子邮件,如果有警告或错误的日志。但是它必须只检查上次检查后添加的行,而不是一遍又一遍地检查整个文档。我不知道如何只检查上次检查后添加的行,或者在最后10分钟中添加的行在我的情况下无法工作,因为脚本不应该一直运行,应该每5-10分钟运行一次

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-19 15:25:45

如果文件不太大,可以尝试将日志文件的前几行存储在环境变量中,并将其与当前行号进行比较。类似于以下脚本的内容应该可以工作:

代码语言:javascript
运行
复制
#!/bin/bash

#here, detect_errors is a placeholder name for the function you already developped
#we use only the lines we haven't seen yet in our detect_errors function
detect_errors "$(head -n $(($(wc -l log.file) - OLD_LINE_COUNT)) log.file)"

#we update the new value for the $OLD_LINE_COUNT
export OLD_LINE_COUNT="$(wc -l log.file)"

详细解释

  • head -n X myfile:显示myfile的前X行
  • $(( ... ))bash中的算术计算
  • wc -l log.file:我们文件的行数
  • $OLD_LINE_COUNT:环境变量,存储上一次迭代的行数(第一次启动脚本时等于0)

如果文件不变,$(wc -l log.file) - OLD_LINE_COUNT将返回0,head -n 0返回空。

如果日志文件太大,wc -l将花费大量时间,因此在这种情况下,我的方法不会被重新使用。

编辑:,我还没有问您的日志文件是如何递增的。如果在文件末尾添加了附加行,则应该使用tail -n而不是head -n

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45194296

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档