Ich versuche, eine kleine Zeichenfolge innerhalb eines Leseblocks über nc an statsd zu senden:
while read line; do
printf "folder.counter:value|1c" | nc -q 0 -u $host $port
done
Leider scheint nc im UDP-Modus auf unbestimmte Zeit warten zu wollen, obwohl ich angegeben habe -q 0
, dass die Manpage besagt, dass das Programm sofort nach EOF beendet wird.
Ich habe versucht zu übergeben -w 1
, aber wenn die Daten, die ich sende, mit mehr als einer Zeile pro Sekunde eingehen, werden die Daten gepuffert und ich verliere meine Echtzeit-Statistiken (ganz zu schweigen von dem Risiko eines Pufferüberlaufs).
Ist es möglich, das zu tun, was ich mit Netcat versuche, oder muss ich etwas in einer Sprache schreiben, die eine statsd-Bibliothek hat?
Antworten:
Am Ende habe ich das Problem behoben, indem ich zu folgendem gewechselt habe
socat
:quelle
Sie können 0 als Zeitüberschreitungswert für -w angeben, damit es überhaupt nicht wartet.
quelle
invalid wait-time 0
Das Hinzufügen der Option -v löste mein Problem. Der Grund, warum ich nicht sicher bin.
quelle
Ich hatte das gleiche Problem. löste es mit der
-c
Option:so etwas wie
Ja, es ist nicht wirklich sinnvoll, eine udp-Verbindung zu "schließen" - aber das funktionierte schließlich.
quelle
-c
löste mein Problem mitnetcat (The GNU Netcat) 0.7.1
Für uns war es so, dass wir eine nc-Nutzlast über ein Python-Skript von einer Maschine zu einer anderen sendeten. Als wir in der Python-Version die Nutzdaten explizit in 'UTF-8' verschlüsselt haben, hat es einfach funktioniert.
quelle