Php 需要从日志中读取数据。。。tail、grep和inotifywait

Php 需要从日志中读取数据。。。tail、grep和inotifywait,php,linux,bash,post,curl,Php,Linux,Bash,Post,Curl,我在一台服务器上有数据,这些数据进入一个不断增长的日志文件。我需要跟踪日志并grep一些信息,然后将其发送到另一个服务器,以便php插入数据库。无法允许具有日志的计算机访问数据库。到目前为止我已经尝试过了,但是我在bash命令上的语法是错误的,我不知道这是一种方法还是有更好的方法?Netcat是另一个想法 monitor.sh send.php 要在PHP中执行外部命令,需要使用反勾号而不是单引号。它们通常位于键盘上的ESC键下方 $data = 'tail -n 3 /usr/local/lo

我在一台服务器上有数据,这些数据进入一个不断增长的日志文件。我需要跟踪日志并grep一些信息,然后将其发送到另一个服务器,以便php插入数据库。无法允许具有日志的计算机访问数据库。到目前为止我已经尝试过了,但是我在bash命令上的语法是错误的,我不知道这是一种方法还是有更好的方法?Netcat是另一个想法

monitor.sh send.php
要在PHP中执行外部命令,需要使用反勾号而不是单引号。它们通常位于键盘上的
ESC
键下方

$data = 'tail -n 3 /usr/local/log/output.log';
应该是

$data = `tail -n 3 /usr/local/log/output.log`;

另外,您不应该使用
tail-f
,因为它在您提供
EOF
(control+D)之前不会返回。

我从未这样做过,但它应该(可能)工作:

为什么不使用域套接字(FIFO)

$mkfifo/path/to/my/fifo
$tail-f/path/to/log>/path/to/my/fifo&
$php send.php
send.php应该能够在$line=fread(…)上循环,从现在开始直到enternity…

您可以尝试以下方法:

#!/bin/sh
tail -f /usr/local/log/thelog.log | grep -B1 "ABC=" | while read line
do
    php /usr/bin/send.php $line
done

注意:您必须更改
send.php
以接受数据作为参数(而不是从输出日志中读取数据)。

有一些类似的实用程序,您可能会感兴趣:logster和logtail。
$data = `tail -n 3 /usr/local/log/output.log`;
$ mkfifo /path/to/my/fifo
$ tail -f /path/to/log > /path/to/my/fifo &
$ php send.php < /path/to/my/fifo
#!/bin/sh
tail -f /usr/local/log/thelog.log | grep -B1 "ABC=" | while read line
do
    php /usr/bin/send.php $line
done