我想在日志文件中出现特定文本后立即运行命令。我如何在 Bash 中做到这一点?
ketorin
问问题
1876 次
5 回答
14
使用命令
tail -f file.log | grep --line-buffered "my pattern" | while read line
do
echo $line
done
是这里--line-buffered
的关键,否则读取会失败。
于 2008-10-01T11:19:40.727 回答
5
仅使用tail
:
tail -f file.log | while read line; do if [[ $line == *text* ]]; then
mycommand
fi; done
于 2008-10-01T11:33:48.537 回答
1
即使没有 GNU grep,这也应该可以工作:
tail -f -n 0 logfile.out | nawk '/pattern/ {system("echo do something here")}'
编辑:添加了“-n 0”,以便只匹配新出现的文本。
于 2008-10-01T11:31:24.253 回答
1
您还可以查看inotail
,一个替代品,仅在您感兴趣的文件发生更改时才tail -f
使用inotify
框架唤醒。通常tail -f
只是在轮询之间休眠很短的时间,这是一种有效但不是非常有效的解决方案。
于 2008-10-05T12:51:33.637 回答
0
我喜欢matli的回答。Bruno De Fraine 的回答也很好,因为它只使用 shell ccommands,而不是其他程序(如 awk)。它存在整行必须匹配魔术字符串的问题。从作为要求的一部分的问题中不清楚。
我会稍微修改一下以处理原始问题中的“尽快”子句
logfile_generator | tee logfile.out | nawk '/pattern/ {system("echo do something here")}'
其中 logfile_generator 是首先生成日志文件的程序。一旦找到魔术字符串,此修改就会执行“某事”。
于 2008-10-01T19:13:18.480 回答