相当于URL的tail -f


10

我想监视我的应用程序的日志文件,但是该日志文件无法在本地运行,而是在SaaS平台上运行,并通过HTTP和WebDAV公开。因此,等效于URL的tail -f将对我做得很好。

PS如果您知道可以通过HTTP监视远程文件的任何其他工具,它也可能会有所帮助。谢谢


1
它在远程服务器上显示为纯文本还是html?
terdon 2012年

具有特定格式的纯文本:[timestamp] Error_name .....然后,我打算通过grep进行过滤
munch

您可以使用wget -N http://somewhere/something,仅当文件比以前下载的文件新时才下载文件,或用于wget -O - http://somewhere/something将文件重定向到stdout。
2012年

Answers:


11

可能有一个特定的工具,但是您也可以使用wget来完成。打开终端并运行以下命令:

while(1); do \
    sleep 2; \
    wget -ca -O log.txt -o /dev/null http://yoursite.com/log; \
done

这将每两秒钟下载一次日志文件,并将其保存到log.txt将输出附加到已经存在的文件中(-c意味着继续下载-a并将其附加到给定的文件名中)。该-o重定向错误消息/dev/null/

因此,现在您有了log.txt的本地副本,并且可以tail -f在其上运行:

tail -f log.txt 

我发现我可以使用davfs2与webDAV界面集成,然后像常规文件一样使用该文件。这是我真正的期望。但是您的解决方案更简单并且可以实际使用
2012年

我发现所有内容都保存在“ log”文件而不是“ log.txt”中。在我的情况下,此方法有效:wget -ca -O log.txt -o / dev / null yoursite.com/log
yatsek 2014年

@munch davfs2不能很好地工作。就我而言,我发现tail -f除非有其他进程主动向服务器请求目录更新,否则它不会更新文件更改(一个普通的ls看起来就足够了)。问题在于tail -f依赖inotify,而inotify似乎无法在davfs2上工作。
jesjimher

@jesjimher tail不依赖inotify。它只是读取文件,进行查找并再次读取。如果它不能与davfs一起很好地工作,那将取决于davfs本身的工作方式。据推测,它仅在某些人正在主动读取目录时更新信息,并且由于tail使文件保持打开状态,因此不会触发该信息。或类似的规定。
terdon

据我了解tail的代码,它不是依赖关系,但是它使用inotify(如果可用),仅当inotify在系统中不可用时才诉诸轮询行为。由于davfs在不进行显式请求的情况下无法知道文件的更改时间,因此在其他进程请求目录刷新之前,不会生成inotify事件。如果tail有某种方法可以强制轮询,即使inotify可用,也很好,但是我没有找到这样的参数。
jesjimher

3

这里,我用一个完整的shell脚本回答了相同的问题,该脚本将URL作为参数并且是URL tail -f。这是逐字回答的副本:


这样做:

#!/bin/bash

file=$(mktemp)
trap 'rm $file' EXIT

(while true; do
    # shellcheck disable=SC2094
    curl --fail -r "$(stat -c %s "$file")"- "$1" >> "$file"
done) &
pid=$!
trap 'kill $pid; rm $file' EXIT

tail -f "$file"

它在网络服务器上不是很友好。您可以将替换为truesleep 1以减少资源消耗。

像一样tail -f^C即使完成输出,您也需要观察完输出。


0

curl with range选项与手表结合使用可实现以下目的:

范围

HTTP 1.1引入了字节范围。使用此功能,客户可以请求仅获取指定文档的一个或多个子部分。Curl通过-r标志支持此功能。

watch -n <interval> 'curl -s -r -<bytes> <url>'

例如

watch -n 30 'curl -s -r -2000 http://yoursite.com/log'

这将每30秒检索日志的最后2000个字节。

注意:对于自签名的https,请使用--insecure curl选项

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.