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.
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
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
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/log
ne 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
Vous pouvez utiliser socat sur Debian. Pour l'installer:
# apt-get install socat
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.