gpt4 book ai didi

linux - 用于等待日志文件中特定字符串的 Bash 脚本优化

转载 作者:IT王子 更新时间:2023-10-29 00:54:54 32 4
gpt4 key购买 nike

我正在使用一个 bash 脚本,该脚本调用必须按特定顺序启动的多个进程,并且必须先完成某些操作(然后它们将某些消息打印到日志中),然后才能启动下一个操作。 bash 脚本具有以下代码,在大多数情况下都非常有效:

tail -Fn +1 "$log_file" | while read line; do
if echo "$line" | grep -qEi "$search_text"; then
echo "[INFO] $process_name process started up successfully"
pkill -9 -P $$ tail
return 0
elif echo "$line" | grep -qEi '^error\b'; then
echo "[INFO] ERROR or Exception is thrown listed below. $process_name process startup aborted"
echo " ($line) "
echo "[INFO] Please check $process_name process log file=$log_file for problems"
pkill -9 -P $$ tail
return 1
fi
done

但是,当我们将进程设置为在 DEBUG 模式下打印日志记录时,它们打印的日志记录太多以至于此脚本无法跟上,并且在进程完成后大约需要 15 分钟 bash 脚本才能 catch 。有没有办法对此进行优化,例如将“读取行时”更改为“读取 100 行时”或类似的方法?

最佳答案

每个日志行最多不 fork 两个 grep 进程如何?

tail -Fn +1 "$log_file" | grep -Ei "$search_text|^error\b" | while read line; do

因此,如果您愿意,一个长时间运行的 grep 进程应该进行预处理。

编辑:如评论中所述,将--line-buffered 添加到grep 调用中会更安全。

关于linux - 用于等待日志文件中特定字符串的 Bash 脚本优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23652785/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com