我有一个要监视的日志文件,根据满足的条件,应该执行不同的命令。
我找到了一个接近于此的解决方案这里。不幸的是,它对我不起作用,只会在终端中给我空行。
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