linux - Bash 脚本监控日志,匹配关键字然后发送命令,恢复监控
问题描述
#!/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
PS:请在运行前进行相关更改。
推荐阅读
- spring - Thymeleaf 本地 @{} 网址不起作用
- pentaho-spoon - Pentaho Web Services Lookup 无法加载 url
- create-react-app - yarn create 不像 npx 那样工作
- ajax - ASP.NET Ajax Get 耗时过长
- php - 序列化对象中的特殊字符正在破坏 PHP 会话
- elasticsearch - Elasticsearch 搜索多个字段
- linux - 调试基于 Make / Concerto 的 Makefile
- amazon-web-services - 启动 Instance Store 支持的实例
- xcode - dyld:库未加载。安装 XCode Beta 10 后终端出错
- python - 使用 tf.while_loop (TensorFlow) 从图中累积输出