読み取りブロック内のncを介してstatsdに小さな文字列を送信しようとしています:
while read line; do
printf "folder.counter:value|1c" | nc -q 0 -u $Host $port
done
残念ながら、UDPモードの場合、-q 0
を指定したにもかかわらず、ncは無期限に待機したいようです。これにより、manページには、EOFの直後にプログラムが終了するように記載されています。
私は-w 1
を渡そうとしましたが、送信しているデータが1秒あたり1行を超えると、データがバッファリングし、リアルタイムの統計情報が失われます(バッファオーバーフローのリスクは言うまでもありません)ある種の)。
Netcatでやろうとしていることを実行することは可能ですか、それともstatsdライブラリを持つ言語で何かを記述する必要がありますか?
socat
に切り替えることで問題を解決することになりました。
while read line; do
printf "folder.counter:value|1c" | socat -t 0 - UDP:$Host:$port
done
-wのタイムアウト値として0を指定できるため、まったく待機しません。
同じ問題がありました。 -c
オプションを使用して解決しました:
-c, --close close connection on EOF from stdin
のようなもの
while read line; do
printf "folder.counter:value|1c" | nc -cu $Host $port
done
うん、udp-connectionを「閉じる」ことは実際には意味がありませんが、それでうまくいきました。
-vオプションを追加すると問題が解決しました。理由はわかりません。
私たちにとっては、pythonスクリプトを使用して、あるマシンから別のマシンにncペイロードを送信していました。Pythonでは、 'UTF-8'でペイロードを明示的にエンコードすると、働いた。