Cha*_*Wei 6 linux shell curl http
我想从嵌入式设备收集实时日志。该设备具有有限的命令。如果我可以通过 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
Run Code Online (Sandbox Code Playgroud)
上面的命令有效,但它会逐行发布消息。但是,如果我要发送的内容很多,我认为性能并不好。
我知道 HTTP/1.1 支持分块编码。如何将程序的标准输出重定向到curlHTTP 流(可能是长连接?)。
谢谢
您可以使用像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
Run Code Online (Sandbox Code Playgroud)
这会减少curl对Web服务的HTTP请求数量(但可能会在连接中断时丢失一些日志)。
不过,我同意 Nick Russo 的观点,即实施 Websocket 可能是一个更好的主意。
希望这可以帮助!