Php 如何在linux中每当tail-f显示日志文件中的新行时执行mysql查询

Php 如何在linux中每当tail-f显示日志文件中的新行时执行mysql查询,php,parsing,bash,logging,tail,Php,Parsing,Bash,Logging,Tail,我试图用tail-f监视一个日志文件,用grep解析它以提取一些数据,并将数据作为mysql查询传递。 我可以通过将tailf检测到的每一行新行传递给一个php脚本来实现这一点,但我不知道如何做到这一点。。 或者我可以直接用php模拟tailf,但是如何用php监控文件的更改呢? 我想只要有一段时间,看看尺寸,记住最后一个位置,寻找它,读到差别,对吗? 任何人都可以给出一些关于什么更好使用的提示?还是更简单? 我还听说命名管道可能是一种解决方案,但不知道如何从中获取数据 顺便说一下,记录器是ng

我试图用tail-f监视一个日志文件,用grep解析它以提取一些数据,并将数据作为mysql查询传递。 我可以通过将tailf检测到的每一行新行传递给一个php脚本来实现这一点,但我不知道如何做到这一点。。 或者我可以直接用php模拟tailf,但是如何用php监控文件的更改呢? 我想只要有一段时间,看看尺寸,记住最后一个位置,寻找它,读到差别,对吗? 任何人都可以给出一些关于什么更好使用的提示?还是更简单? 我还听说命名管道可能是一种解决方案,但不知道如何从中获取数据 顺便说一下,记录器是nginx。。
谢谢

在shell中,您可以执行以下操作:

tail -f file.log|grep whatever-you-want|while read line; do 
  echo $line
done
只需将行
echo$line
更改为您想要的-您可以在该行中调用PHP或您想要的任何东西,
$line
是tail/grep组合中的行

查看这些SOq了解更多信息:


您正在混合使用不同的方法。tail-f意味着您将一直运行一个进程,如果日志文件被截断(旋转),您很可能会被卡住。如果您需要日志监视的好东西(我假设是linux),那么您必须监视文件的更改,并寻找记忆中的位置。IMHO的最佳方法是依靠现有的解决方案。首先想到的似乎是syslog ng。它可以通过管道将日志文件传输到程序中。尽管非系统日志的情况并非如此。我会选择的。这将需要一个正在运行的进程。作为最后一个(顺序取决于您的情况)解决方案,我会定期使用cron进行检查。

我对PHP的体验是,当它读取文件时,它往往会阻塞文件(当然,我只会打开以非阻塞方式读取),希望您不打算编写会阻塞的代码。如果您计划对一个必须管理访问并发性的应用程序使用这种方法,那么您可以在IO中阻止几十个(如果不是数百个)进程来等待读取文件。。。。你最好再想想你在做什么:)