php - 需要从日志中读取数据...tail、grep 和 inotifywait

标签 php linux bash post curl

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

监控.sh

#!/bin/sh

tail -f /usr/local/log/thelog.log | grep -B1 "ABC=" > /usr/local/log/output.log;  

while inotifywait -e modify /usr/local/log/output.log; do
sleep 10;  
php /usr/bin/send.php;  
done

发送.php

<?php
//extract data from the post
//extract($_POST);
//set POST variables

$data = 'tail -n 3 /usr/local/log/output.log';
$url = 'http://www.blahblah.com/logtodb.php';

$data = str_replace("A", "", $data);
$data = str_replace("B=", "", $data);
$data = str_replace("C=", "", $data);
$data = str_replace("D=", "", $data);

$fields = array(
'data'=>urlencode($data)d,
);

//url-ify the data for the POST
foreach($fields as $key=>$value) { $fields_string .= $key.'='.$value.'&'; }
rtrim($fields_string,'&');

//open connection
$ch = curl_init();

//set the url, number of POST vars, POST data
curl_setopt($ch,CURLOPT_URL,$url);
curl_setopt($ch,CURLOPT_POST,count($fields));
curl_setopt($ch,CURLOPT_POSTFIELDS,$fields_string);

   //execute post
   $result = curl_exec($ch);

   //close connection
   curl_close($ch);
   A>

logtodb.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) 之前它不会返回。

关于php - 需要从日志中读取数据...tail、grep 和 inotifywait,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784037/

相关文章:

php - 显示从 MySQL 获取的 15 个元素的限制(而我被迫使用 15 以上的 LIMIT)

PHP 整洁地删除 <span>

php - 自动填写网络表单并返回结果页面

linux - 自动暂停进程

Linux:echo 3 >/proc/sys/vm/drop_caches 需要几个小时才能完成

c - Shell CTRL-C 忽略

php foreach循环,根据if/else添加到不同的div

linux - 在 Intel x86 处理器上运行带有 Solaris OS(Sparc 体系结构)的 VM 将小 Endian 解析为大 Endian?

linux - 我无法让我的 bash 脚本运行

linux - 这个 bash 脚本如何启动程序?