J'essaie d'envoyer une petite chaîne à StatsD via NC à l'intérieur d'un bloc de lecture:
while read line; do
printf "folder.counter:value|1c" | nc -q 0 -u $Host $port
done
Malheureusement, lorsqu'il est en mode UDP, NC semble vouloir attendre indéfiniment, même si j'ai spécifié -q 0
, que dit la page de l'homme fera la sortie du programme immédiatement après EOF.
J'ai essayé de passer -w 1
, mais si les données que j'envoies sont entrées à plus d'une ligne par seconde, les données tamponnent, et je perds mes statistiques en temps réel (sans parler de risquer un débordement de tampon de quelque sorte).
Est-il possible de faire ce que j'essaie de faire avec Netcat ou que je vais devoir écrire quelque chose dans la langue qui a une bibliothèque StatsD?
J'ai fini par résoudre le problème en passant à socat
:
while read line; do
printf "folder.counter:value|1c" | socat -t 0 - UDP:$Host:$port
done
Vous pouvez spécifier 0 comme une valeur de délai d'attente à -w, de sorte que cela n'attendra pas du tout.
J'ai eu le même problème; résolu en utilisant le -c
Option:
-c, --close close connection on EOF from stdin
alors quelque chose comme
while read line; do
printf "folder.counter:value|1c" | nc -cu $Host $port
done
Oui, n'a pas vraiment de sens de "fermer" une connexion UDP - mais cela a fini de fonctionner.
ajout d'option -v a résolu mon problème. La raison pour laquelle je ne suis pas sûr.
Pour nous, c'était que nous envoyions une charge utile NC d'une machine à une autre via A python script. Dans le python, lorsque nous avons explicitement codé sur la charge utile dans "UTF-8", travaillé.