linux - 如何将 tail -f 输出重定向到 curl(HTTP 流)

标签 linux shell http curl

我想从嵌入式设备收集实时日志。该设备的命令有限。如果我可以通过 shell 脚本来完成,那就太好了。

那么,我可以做这样的事情吗 tail -f /var/logs/some-log.log | curl -X POST --data-urlencode @- http://<log-collaction.website>

我尝试了很多方法,但都失败了。例如:

ping www.google.com | while read -r LINE; do curl -X POST --silent --data-binary $LINE "http://localhost:8080/"; done

上述命令有效,但它会逐行发布消息。但是,如果我有很多内容要发送,我认为性能不好。

我知道 HTTP/1.1 支持分 block 编码。如何将程序的标准输出重定向到 curl或 HTTP 流(可能是长连接?)。

谢谢

最佳答案

您可以使用类似 buffer 的工具(或者可能更好 mbuffer )将这两种策略结合起来。

tail -f  /var/logs/some-log.log | buffer | while read -r LINE; do curl -X POST --silent --data-binary $LINE "http://localhost:8080/"; done

这会通过 curl 减少对您的网络服务的 HTTP 请求数量(但可能会使您在连接中断时丢失一些日志)。

但是,我同意 Nick Russo 的观点,即实现 websockets 可能是一个更好的主意。

希望这对您有所帮助!

关于linux - 如何将 tail -f 输出重定向到 curl(HTTP 流),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46132361/

相关文章:

休息。不存在资源的子资源

http - 客户端关闭连接时,转到http.ResponseWriter.Write不返回错误

linux - epoll_wait 似乎卡在了 EPOLLRDHUP

c++ - 为什么使用 mkdir() 函数比使用系统 ('mkdir path' 快得多)?

shell - 如何在 shell 中逐行处理命令的输出?

linux - 根据存在的命令终止 Linux 进程

linux - shell 是否回显完整内容而不使用转义字符

json - 用于在 JSON 中上传文件的 REST API

linux - 如何跟踪 Linux 内核中网络子系统的内存使用情况?

Java - 如何获取已安装 RPM 包的列表