监控日志文件并根据不同的情况执行不同的命令

监控日志文件并根据不同的情况执行不同的命令

我有一个要监视的日志文件,根据满足的条件,应该执行不同的命令。

我找到了一个接近于此的解决方案这里。不幸的是,它对我不起作用,只会在终端中给我空行。

xterm -e "$path_to_program | tee -a ${log_path}" & tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo "VPN is running."") } /[HOST_NOT_FOUND]/ { system("echo "error"") }

还有其他解决方案可以帮助我解决问题吗?

答案1

在上面的示例代码中,您没有正确转义字符:您需要更多类似的内容:

tail -f ${log_path} | awk '/Initialization Sequence Completed/ { system("echo \"VPN is running.\"") } /\[HOST_NOT_FOUND\]/ { system("echo \"error\"")}'

您可能还想研究 logrotate 的使用。如果您利用它的postrotate规则,您可以让一个日志处理器为您处理不会无限增长和/或填满存储空间的日志。

答案2

解决方案有效,但仅存在我注意到的问题。由于某种原因,awk 仅每 2 分钟读取一次日志文件,然后向终端发送垃圾邮件“错误”,因为当时 HOST_NOT_FOUND 当然在日志中出现了几次。我找到了一个更好的解决方案线。请记住,尾部必须单独关闭。

tail -f ${log_path} | while read LOGLINE
do 
     [[ "${LOGLINE}" == *"Initialization Sequence Completed"*]] && echo "VPN is running"
     [[ "${LOGLINE}" == *HOST_NOT_FOUND"* ]] && echo "VPN failed."
done

相关内容