bash - Grep apache 服务器 500 错误到一个单独的文件

标签 bash shell grep tail

您好,我正在尝试跟踪 apache 访问日志并将错误复制到另一个文件。我尝试了以下选项,所有选项都在命令行中工作,但是当从脚本触发时,它们不工作。

我知道 tail 命令没有退出,所以没有输出。但不确定如何克服这一点。

/usr/bin/tail -f /apps/apache/logs/access_log | grep -h "HTTP\/1.1\" 50." >> /tmp/log_error_capture.txt
 grep -m 1 "HTTP\/1.1\" 50." <(tail -f /apps/apache/logs/access_log)
( tail -f -n0 /apps/apache/logs/access_log & ) | grep -q "HTTP\/1.1\" 50." > /tmp/log_error_capture.txt
tail -f logfile |grep -m 1 "HTTP\/1.1\" 50." | xargs echo "" >> logfile \;

有人可以建议一种更好的 grep 错误方法吗?请。

最佳答案

如果你想监控不断增长的日志文件,在日志文件停止增长之前,你的命令无法完成。我猜你只是想做这项工作的背景:

tail -f access_log | grep "HTTP/1\.[01]\" 50." >> /tmp/log_error_capture.txt &

顺便说一下,我删除了斜线前的反斜线(斜线不是正则表达式的特殊符号,所以它不需要转义)并在点前添加了一个反斜线(相反的位置)并且更新了表达式以接受 HTTP/1.0 和 1.1。 (我也偶尔看到 0.9,但我猜这些只是测试和/或无论如何都可以忽略不计。)另外,因为 grep 正在读取标准输入,所以 -h选项没用,所以我删除了它。

当日志文件轮换时,这将继续运行,但不会产生任何有用的东西。也许您想保留 PID 并将其作为日志轮换脚本的一部分重新启动;或者您可能只是想在日志轮换时运行一次 grep,而不是让它在后台继续运行。

或者,您可以使用 tail --follow=name 来继续运行,甚至可以跨日志轮换。对于生产系统,您仍然应该弄清楚如何处理此脚本的日志轮换(即如何以及何时轮换 50 倍错误的文件)。

关于bash - Grep apache 服务器 500 错误到一个单独的文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37382844/

相关文章:

bash - bash 脚本中的换行符

bash - 我刚刚分配了一个变量,但 echo $variable 显示了其他内容

java - 使用unix通过crontab运行java类时出现ClassnotFoundException?

Linux -/proc/PID 何时创建?

linux - 从 gzip 文件的开头剥离 bash 脚本

javascript - 使用node child_process.exec执行top命令时如何解决错误?

bash - 如何为 grep -R 编写别名?

grep - grep 允许搜索重复项吗?

linux - Grep Next Line Only If Two Lines above Match String 连续

linux - 如何遍历awk中的列?