【问题标题】:Is there a way to perform a "tail -f" from an url?有没有办法从 url 执行“tail -f”?
【发布时间】:2015-07-08 13:06:28
【问题描述】:

我目前使用 tail -f 来监控日志文件:这样我得到一个自动刷新控制台来监控 Web 服务器。

现在,所说的网络服务器已移至另一台主机,而我对此没有 shell 权限。 不过我有一个 .txt 网络路径,最后是一个不断更新的日志文件。

所以,我想做一些类似于 tail -f 的操作,但是在那个 url 上。 这可能吗?最后“在linux中一切都是文件”所以..

【问题讨论】:

标签: linux bash tail


【解决方案1】:

您可以在 watchwget 的帮助下进行自动刷新。 它不会显示历史记录,如tail -f,而是更新屏幕,如top。 命令示例,在屏幕上显示 file.txt 的内容,并每五秒更新一次输出:

watch -n 5 wget -qO-  http://fake.link/file.txt

另外,您可以输出最后 n 行,而不是整个文件:

watch -n 5 "wget -qO-  http://fake.link/file.txt | tail"

如果您仍然需要“tail -f”(保留历史记录)之类的行为,我认为您需要编写一个脚本,该脚本将在每个时间段下载日志文件,将其与之前下载的版本进行比较,然后打印新的线。应该很容易。

【讨论】:

  • -1 这只是每次下载整个资源。拖尾意味着密切关注不断增长的资源并在出现内容时对其进行检索。
【解决方案2】:

我编写了一个简单的 bash 脚本,每 2 秒获取一次 URL 内容并与本地文件 output.txt 进行比较,然后将差异附加到同一个文件中

我想在我的 Jenkins 管道中流式传输 AWS 放大日志

while true; do comm -13 --output-delimiter="" <(cat output.txt) <(curl -s "$URL") >> output.txt; sleep 2; done

别忘了先创建空文件output.txt文件

: > output.txt

查看直播:

tail -f output.txt

原评论:https://stackoverflow.com/a/62347827/2073339

更新:

我在这里使用 wget 找到了更好的解决方案:

while true; do wget -ca -o /dev/null -O output.txt "$URL"; sleep 2; done

https://superuser.com/a/514078/603774

【讨论】:

    【解决方案3】:

    我制作了这个小函数并将其添加到我的 shell 的 .*rc 中。这使用了wget -c,所以它不会重新下载整个页面:

    # Poll logs continuously over HTTP
    logpoll() {
        FILE=$(mktemp)
    
        echo "———————— LOGPOLLING TO $FILE ————————"
        tail -f $FILE &
        tail_pid=$!
        bg %1
    
        stop=0
        trap "stop=1" SIGINT SIGTERM
        while [ $stop -ne 1 ]; do wget -co /dev/null -O $FILE "$1"; sleep 2; done
    
        echo "——————————— LOGPOLL DONE ————————————"
    
        kill $tail_pid
        rm $FILE
        trap - SIGINT SIGTERM
    }
    

    说明:

    • 使用mktemp 创建一个临时日志文件并将其路径保存到$FILE
    • 使tail -f在后台连续输出日志文件
    • ctrl+c设置stop1而不是退出函数
    • 循环直到stop位被设置,即直到用户按下ctrl+c
    • wget 每两秒循环一次给定 URL:
      • -c - “继续获取部分下载的文件”,以便 wget 继续而不是截断文件并再次下载
      • -o /dev/null - wget 的日志消息将被扔进 void
      • -O $FILE - 将内容输出到我们创建的临时日志文件中
    • 自行清理:杀死tail -f,删除临时日志文件,取消设置信号处理程序。

    【讨论】:

    • @CharlesDuffy 对。已修复,谢谢指出。
    【解决方案4】:

    建议的解决方案会定期下载完整文件。

    为了避免我创建了一个包并在 NPM 中发布,它执行 HEAD 请求(获取文件的大小)并且只请求最后一个字节。

    检查一下,如果您需要任何帮助,请告诉我。

    https://www.npmjs.com/package/@imdt-os/url-tail

    【讨论】:

    • 请在这篇文章中解释如何使用它。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-20
    • 2011-06-28
    • 2020-02-14
    相关资源
    最近更新 更多