gpt4 book ai didi

linux - Bash 脚本监控日志,匹配关键字然后发送命令,恢复监控

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:15:51 27 4
gpt4 key购买 nike

#!/bin/bash
sudo tail -fn0 /home/main/time.log |
grep -o --line-buffered 'garage\|garden\|porch' | head -1 |
while read line; do
sudo pkill -f porch.sh &
sudo pkill -f garage.sh &
done

我正在尝试编写一个脚本来监控日志,并在匹配关键字时触发一些命令。

问题是,我拼凑的东西只能工作一次,然后退出并停止监控。

如果尾部同时出现多个关键字,我希望它在第一个关键字处执行,忽略其余关键字,执行列出的脚本,然后返回监控日志的尾部。我在 grep 中添加了“head -1”以在第一次匹配后停止 grep,但这也会退出 grep,因此脚本基本上会停止监视。

我希望脚本在匹配关键字后保持事件状态,并继续监视日志的尾部以查找可能被记录的任何新关键字。

非常感谢任何建议。谢谢!

最佳答案

这段代码可以变得更紧凑、更高效,但这种长格式将有助于理解正在发生的事情:

所以基本思路是监控/home/main/time.log 并检查文件中的行数是否发生了变化,如果发生了变化,那么我们想知道有多少新的添加了行,我们将使用此变量来跟踪最后 n 个文件并对它们执行 grep,因为这是运行终止进程所需的条件。

touch last.keyfile

while true
do
old_line=$(cat last.keyfile)
n_lines=$(cat time.log | wc -l);echo $n_lines > last.keyfile


if [ -z $old_line ];then

old_line=$(echo "$n_lines")
fi

differ=$((n_lines-old_line))


if [[ $differ > 0 && $(tail -n"$differ" time.log | grep 'abc\|pub' | wc -l) > 0 ]];then
echo yes

fi
sleep 5
done

附言: 请在运行前进行相关更改。

关于linux - Bash 脚本监控日志,匹配关键字然后发送命令,恢复监控,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52058293/

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