首页 > 解决方案 > 监控日志文件尾部是否有字符串,如果没有找到,退出

问题描述

网络上成千上万的人使用 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 标志。还是坐在那里看着。

标签: bashgreptail

解决方案


如果要查找字符串${SEARCHED},则不需要 test 命令[ ]

( tail -f -n0 "$LOG_FILE" & ) | while IFS= read -r line; do
    if $(echo "${line}" | grep -q "${SEARCHED}") ; then

那么,下面的命令是不是意味着如果创建了下面的文件,子进程就结束了呢?

        touch "MonitorRanAndIamProofWhen"

推荐阅读