我正在尝试对已删除的防火墙事件进行动态日志记录,从而可以动态指定不要记录的事件。
我用:
logread -f | grep -v -f file-with-patterns >> logfile
在后台运行的脚本中。
这工作正常,它会记录除那些我不想通过在文件“file-with-patterns”中指定模式来记录的事件之外的所有内容。
但是,当我更新文件“file-with-patterns”时,grep 似乎不会重新读取它。
更改文件“file-with-patterns”后,我需要终止并重新启动脚本来启动所有这一切,这有点麻烦。
是否可以在不重新启动脚本的情况下使其工作?例如,当 crontab 文件发生更改时,crontab 会自动重新读取它。 grep(或等效实用程序)中是否有某些功能可以像这样工作?
尝试更改 file-with-patterns,grep 没有更改其过滤。
简单的方法是在每一行加载配置,我想性能会受到一点影响。沿着这些思路:
logread -f | while read LINE; do echo "$LINE" | grep -f file-with-patterns; done
为了便于(重新)使用,可以制作一个小型的概念教授操作程序:
sudo nano /usr/bin/¬
#! /bin/bash
while read LINE; do echo "$LINE"; done | $*
然后你可以运行任何命令来代替 grep,如下所示:
logread -f |¬ grep -f file-with-patterns
更好的技巧是监视文件的更改并重新加载(如果存在)。一种方法是借助名为 inotifywait 的工具。沿着这些思路:
while inotifywait -e modify file-with-patterns; do logread -f | grep -f file-with-patterns; done
尝试一下,如果卡住了,请在评论中联系:)