web-dev-qa-db-fra.com

Comment puis-je communiquer avec un socket de domaine Unix via le shell sur Debian Squeeze?

J'utilise un serveur Web Debian Squeeze. J'ai installé memcached dessus et configuré memcached pour écouter sur une socket de domaine Unix (à /tmp/memcached.sock), car il a seulement besoin de recevoir des messages du site Web, qui vit sur le même serveur.

Cela semble bien fonctionner, mais j'aimerais également communiquer avec memcached via le Shell, pour vérifier qu'il fait ce que je pense qu'il fait.

memcached accepte les messages via un simple ASCII (si je comprends bien). S'il écoutait sur TCP/IP, je pourrais lui envoyer des messages via par exemple nc:

$ echo "stats settings" | nc localhost 11211

Mais je ne peux pas comprendre comment envoyer ce texte à la socket de domaine à la place.

Sur mon ordinateur portable (qui exécute OS X Lion), nc et telnet ont des options (-U et -u respectivement) pour utiliser les sockets de domaine. Cependant, sur mon serveur Web Debian Squeeze, ces options ne sont pas présentes.

105
Paul D. Waite

Avec netcat-openbsd, Il y a un -U option. Si vous ne l'avez pas, vous avez probablement netcat-traditional installé à la place; Je suggère de changer.

Exemple de commande: nc -U /var/run/socket

76
derobert

Avec socat (un 'relais de données bidirectionnel entre deux canaux de données'), vous pouvez vous connecter au socket de domaine unix comme ceci:

$ socat - UNIX-CONNECT:/tmp/memcached.sock
97
maxschlepzig

netcat-openbsd prend en charge la connexion aux sockets de domaine UNIX. À l'aide de cela, vous pouvez vous connecter à un socket de flux de domaine UNIX ou à socket de datagramme de domaine UNIX , et donc vous devez dire le type du socket à netcat.

par exemple, /dev/log le fichier sous Linux est un socket de datagramme du domaine UNIX , donc nc -U /dev/logne fonctionnera pas. Utilisez plutôt nc -uU /dev/log. L'utilisation de -u avec -U indique à netcat qu'il s'agit d'un socket de datagramme de domaine UNIX.

nc -U /tmp/socket  #Connect to UNIX-domain stream socket
nc -uU /tmp/socket #Connect to UNIX-domain datagram socket


De même, lorsque vous utilisez socat, utilisez l'option UNIX-CLIENT. En utilisant cette option, vous pouvez vous connecter à la fois au flux de domaine UNIX et au datagramme de domaine UNIX prises. Depuis sa page de manuel (man socat) , " Il essaie d'abord de se connecter et, si cela échoue, l'assume est une prise de datagramme, supportant ainsi les deux types ".

socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
22
Sahil Singh

Vous pouvez utiliser socat sur Debian. Pour l'installer:

# apt-get install socat
15
sendmoreinfo

Si vous vous trouvez sur un système sur lequel seulement busybox est installé, il peut sembler qu'il ne prend pas en charge les sockets de domaine unix (le -U option n'existe pas) mais j'ai trouvé les œuvres suivantes:

$ echo "stats slabs" | nc local:/tmp/memcached.sock
STAT active_slabs 0
STAT total_malloced 0
END

Cela peut être très utile pour créer des contrôles de santé pour les conteneurs Alpine.

3
Greg Bray