bsh*_*ett 16 shell netcat statsd
我正在尝试通过读取块内的 nc 向 statsd 发送一个小字符串:
while read line; do
printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done
Run Code Online (Sandbox Code Playgroud)
不幸的是,在 UDP 模式下, nc 似乎想无限期地等待,即使我已经指定了-q 0
,手册页说这将使程序在 EOF 后立即退出。
我试过 pass -w 1
,但是如果我发送的数据每秒超过一行,数据就会缓冲起来,我会丢失实时统计数据(更不用说冒某种缓冲区溢出的风险了)。
是否可以用 netcat 做我想要做的事情,还是我需要用具有 statsd 库的语言编写一些东西?
我最终通过切换到解决了这个问题socat
:
while read line; do
printf "folder.counter:value|1c" | socat -t 0 - UDP:$host:$port
done
Run Code Online (Sandbox Code Playgroud)