URL 的 tail -f 等效项

URL 的 tail -f 等效项

我想监控应用程序的日志文件,但它不能在本地运行,而是在 SaaS 平台上运行,并通过 HTTP 和 WebDAV 公开。因此,对于 URL 来说,相当于 tail -f 的命令对我来说很管用。

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

答案1

可能有专门的工具可以实现这一点,但你也可以使用 wget 来实现。打开终端并运行以下命令:

while :; 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 

答案2

可以使用带有 range 选项的 curl 与 watch 结合来实现这一点:

范围

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 选项

答案3

我回答过同样的问题这里使用一个完整的 shell 脚本,该脚本将 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

答案4

我已经创建了一个 powershell 脚本

  1. 每 20 秒从给定的 url 获取内容
  2. 使用“Range”HTTP 请求标头仅获取特定数量的数据。
while ($true) {
    $request = [System.Net.WebRequest]::Create("https://raw.githubusercontent.com/fascynacja/blog-demos/master/gwt-marquee/pom.xml")
    $request.AddRange(-1000)
    $response = $request.GetResponse()
    $stream = $response.GetResponseStream()
    $reader = New-Object System.IO.StreamReader($stream)
    $content = $reader.ReadToEnd()
    $reader.Close()
    $stream.Close()
    $response.Close()
 
    Write-Output $content
    
    Start-Sleep -Seconds 20
}

您可以根据自己的需要调整范围和秒数。此外,如果需要,您还可以轻松为特定搜索词添加颜色模式。

相关内容