带有尾部的bash监控文件,包括动态切换文件的能力?



>我有一个脚本,可以逐行监视日志文件并将检索到的值推送到其他地方(例如到图形应用程序(。但是,日志文件名和/或路径可能会在午夜左右更改,例如由于应用程序日志轮换(不是 unix 日志轮换(和应用程序的 EOD 过程。 例如,/path/to/log/20191018/log.txt下的日志文件可以切换到/path/to/log/20191019/log.txt

在脚本中处理这种情况的最佳方法是什么?例如,使 tail 命令开始跟随新文件?

tail -f "$file" | while read line
do case "$line" in
*"a_string"*) do_something 
;;
...
...
esac
done

基本问题是您的脚本无法知道日志轮换已经发生。您可以将日志解析器包装在子进程中,并让父进程监视新文件的目录,但这需要一些假设,以及一些复杂的进程/文件监视逻辑。

我通常更喜欢"通知"机制而不是"轮询"机制,因此解决此问题的干净方法是在文件更改时让日志轮换机制重新启动脚本。如果您使用的是logrotate并且被允许修改其配置,则只需将postrotate条目添加到相应的配置文件即可完成此操作:

/path/to/monitored/directory {
...
postrotate
/usr/bin/killall myscript
/path/to/myscript
endscript
}

最新更新