监视日志文件的尾部是否有字符串,如果找不到,请退出

Monitor tail of log file for string, if you don't find it, quit

网络上有成千上万的人使用 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},则不需要测试命令[ ]

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

那么下面的命令是不是表示创建了下面的文件就结束子进程了?

        touch "MonitorRanAndIamProofWhen"