是否可以 tail -f 外部网络资源?

是否可以 tail -f 外部网络资源?

我可以tail -f从中获得输出http://example.com吗?

我想监控外部 JSON 文件。

答案1

不是。从 tail(1) 手册页来看:

   With  --follow  (-f),  tail  defaults to following the file descriptor,
   which means that even if a tail’ed file is renamed, tail will  continue
   to  track  its  end.   This  default behavior is not desirable when you
   really want to track the actual name of the file, not the file descrip-
   tor (e.g., log rotation).  Use --follow=name in that case.  That causes
   tail to track the named file  in  a  way  that  accommodates  renaming,
   removal and creation.

这意味着 tail 命令需要文件描述符来跟踪它,而当您发出 http 请求时则不需要。您的文件系统不知道远程(就您所指的意义而言)文件已发生更改。要使类似的东西正常工作,您需要使用以特定间隔轮询服务器的实用程序/脚本或使用类似 websockets 的东西(如果服务器支持)。

答案2

实现此目的的一种方法是wget循环运行目标 URL 并执行以下代码:

$ while :; do 
   wget -qO - http://example.com >> /tmp/foo; sleep 1; 
  done

然后从另一个终端运行

$ tail -f /tmp/foo

答案3

tail -f若要在互联网文件上使用,您需要该文件可在本地读取和轮询。实现此目的的一种方法是使用超文本传输​​协议,但这不是一个常用或成熟的软件。

相关内容