it-swarm.com.de

Wie kann ich mit einem Unix-Domain-Socket über die Shell auf Debian Squeeze kommunizieren?

Ich verwende einen Debian Squeeze-Webserver. Ich habe memcached darauf installiert und memcached so konfiguriert, dass es einen Unix-Domain-Socket abhört (bei /tmp/memcached.sock), da nur Nachrichten von der Website empfangen werden müssen, die sich auf demselben Server befindet.

Es scheint gut zu funktionieren, aber ich möchte auch mit memcached über die Shell kommunizieren, um zu überprüfen, ob es das tut, was ich denke, dass es tut.

memcached akzeptiert Nachrichten über ein einfaches ASCII -Protokoll (wenn ich es richtig verstehe). Wenn es TCP/IP abhört, kann ich Nachrichten über z. B. nc an es senden:

$ echo "stats settings" | nc localhost 11211

Ich kann jedoch nicht herausfinden, wie dieser Text stattdessen an den Domain-Socket gesendet werden soll.

Auf meinem Laptop (auf dem OS X Lion ausgeführt wird) haben sowohl nc als auch telnet Optionen (-U und -u), um Domain-Sockets zu verwenden. Auf meinem Debian Squeeze-Webserver sind diese Optionen jedoch nicht vorhanden.

105
Paul D. Waite

Mit netcat-openbsd, da ist ein -U Möglichkeit. Wenn Sie es nicht haben, haben Sie wahrscheinlich netcat-traditional stattdessen installiert; Ich würde vorschlagen, zu wechseln.

Beispielbefehl: nc -U /var/run/socket

76
derobert

Mit socat (einem 'bidirektionalen Datenrelais zwischen zwei Datenkanälen') können Sie eine Verbindung zum Unix-Domain-Socket wie folgt herstellen:

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

netcat-openbsd unterstützt die Verbindung zu UNIX-Domain-Sockets. Auf diese Weise können Sie entweder eine Verbindung zu einem UNIX-Domain-Stream-Socket oder einem UNIX-Domain-Datagramm-Socket herstellen. Daher müssen Sie Netcat den Typ des Sockets mitteilen .

beispielsweise, /dev/log Datei unter Linux ist ein UNIX-Domain-Datagramm-Socket Socket, also nc -U /dev/logfunktioniert nicht. Verwenden Sie stattdessen nc -uU /dev/log. Die Verwendung von -u zusammen mit -U teilt netcat mit, dass es sich um einen UNIX-Domänen-Datagramm-Socket handelt.

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


Verwenden Sie bei Verwendung von socat die Option UNIX-CLIENT. Mit dieser Option können Sie eine Verbindung zu den Sockets UNIX-Domain-Stream und UNIX-Domain-Datagramm herstellen. Von seiner Manpage (man socat), " Es versucht zuerst eine Verbindung herzustellen und nimmt an, dass es sich um einen Datagramm-Socket handelt, der beide Typen unterstützt ".

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

Sie können socat auf Debian verwenden. So installieren Sie es:

# apt-get install socat
15
sendmoreinfo

Wenn Sie sich auf einem System befinden, auf dem nur die Busybox installiert ist, werden möglicherweise keine Unix-Domain-Sockets unterstützt (-U Option existiert nicht), aber ich habe die folgenden Werke gefunden:

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

Dies kann sehr hilfreich sein, um Gesundheitschecks für Alpencontainer zu erstellen.

3
Greg Bray