我想从嵌入式设备收集实时日志。该设备的命令有限。如果我可以通过 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/