bash - 监控日志文件尾部是否有字符串,如果没有找到,退出
问题描述
网络上成千上万的人使用 tail 来监视日志文件中的字符串,如果找不到,请继续监视。这与我遇到的问题相反——我正在尝试从根本上节省资源,并且我不希望有一个持续的线程监视日志:我正在尝试设置一个 cron 作业以每半小时运行一次。但这意味着 Bash 脚本,无论是 tail 还是 grep,都必须监视该字符串,然后退出,无论它是否找到它。这是我最好的尝试:
LOG_FILE="/var/log/syslog"
SEARCHED="fallback errored"
( tail -f -n0 "$LOG_FILE" & ) | while IFS= read -r line; do
if [ $(echo "${line}" | grep -q "${SEARCHED}") ] ; then
curl -X POST https://maker.ifttt.com/trigger/EthFail/with/key/XXXXX
touch "MonitorRanAndIamProofWhen"
fi
done
exit 0
但它只是继续运行......尝试将 tail 放入自己的子进程并在 read 语句中添加 -t time 标志。还是坐在那里看着。
解决方案
如果要查找字符串${SEARCHED}
,则不需要 test 命令[ ]
。
( tail -f -n0 "$LOG_FILE" & ) | while IFS= read -r line; do
if $(echo "${line}" | grep -q "${SEARCHED}") ; then
那么,下面的命令是不是意味着如果创建了下面的文件,子进程就结束了呢?
touch "MonitorRanAndIamProofWhen"
推荐阅读
- computer-vision - tesseract - 如何处理字符分隔符
- node.js - 添加许多异步作业时,Node.js 变得非常慢
- android - SecurityException: Permission Denial 即使我正在获取运行时权限
- python - 是什么导致 http 请求覆盖由 file.write() 创建的内部缓冲区?
- vb.net - 背景图片移动 vb.net
- php - 如何在 Laravel 5.6 中使用车辆 user_id 打印用户电子邮件
- mongodb - Mongo DB 聚合管道
- firebase - 通过firebase auth添加图片等数据
- std - 具有均值和方差的 pypsark randn
- c++ - 为什么指向函数的指针等于1?