1

我在后台运行(SSH) tail -f access_log | grep 'POST /index.php' > test &

我在存储and的/var/log/httpd地方运行了这个命令。access_logerror_log

我一直在做ls -l,看看test文件是否改变了大小,但它被创建了..并且总是 0 字节。

我什至使用正确的命令tail吗?做我想做的事?

我希望能够过滤掉无用的 access_log 信息,仅将 POST /index.php 存储在不同的文件中。

我知道即使我在迭代它时 access_log 也会不断修改自己,但如果可以从上到下(head?我猜)开始会更好。

4

3 回答 3

1

tail -f将有连续输出,因此> test可能永远不会创建文件。

Ahmed Masud 的回答中的建议可能优于此,因此请先尝试,但如果这对您不起作用,您可以每分钟运行一次或每小时运行一次,或者如果您不需要担心超级高效:

grep 'POST /index.php' access_log > test

test这将在您每次运行它时完全重新创建文件,而不是增量构建它。但是,如果您只想要一个粗糙的工具,那就可以完成它。

test如果您这样做并且您的日志文件被轮换,那么在新文件上运行之后,您将不再拥有先前日志文件中的内容。所以请注意这一点!另一方面,使用tail -f,如果文件旋转,您将停止获取数据,直到您重新启动该过程(并且它也会吹走您的旧数据,除非您使用>>而不是>)。

于 2011-12-01T04:08:39.113 回答
0

尝试在 shell 脚本中执行此操作,

tail -f access_log | while read r ; do 
      echo $r | grep 'POST[[:space:]]*/index.php' >> out
done

这应该摆脱那个讨厌的冲洗问题。

于 2011-12-01T04:12:12.127 回答
0

其他想法:“tail -F -n +1”将跟踪日志文件轮换并从文件顶部读取。另外,您确定您的日志中确实包含 POST 行吗?只是问...最后,文件权限是否合适?

于 2011-12-01T04:22:16.317 回答