Debian Squeezeでシェルを介してUnixドメインソケットと通信するには?

Debian Squeezeでシェルを介してUnixドメインソケットと通信するには?

私はDebian Squeeze Webサーバーを運営しています。 Memcachedをインストールし、Unixドメインソケット(にある/tmp/memcached.sock)を受け取るようにmemcachedを設定しました。なぜなら、同じサーバー上のウェブサイトからのみメッセージを受信する必要があるからです。

うまく動作しているようですが、シェルを介してmemcachedと通信して、私が思うように動作することを確認したいと思います。

memcachedは単純なASCIIプロトコルを介してメッセージを受け入れます(私が正しく理解した場合)。 TCP / IPを受信して​​いる場合は、次のようにメッセージを送信できますnc

$ echo "stats settings" | nc localhost 11211

しかし、そのテキストをドメインソケットに送信する方法がわかりません。

私のラップトップ(OS X Lionを実行)には、ncドメインソケットを使用するオプションがtelnetあります-U-uしかし、私のDebian Squeeze Webサーバーにはこれらのオプションはありません。

答え1

そしてsocat(「2つのデータチャネル間の双方向データリレー」)次のようにUnixドメインソケットに接続できます。

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

答え2

はいnetcat-openbsd、オプションがあります-U。まだインストールされていない場合は、おそらくすでにnetcat-traditionalインストールされています。切り替えることをお勧めします。

コマンド例: nc -U /var/run/socket

答え3

netcat-openbsdUNIXドメインソケット接続をサポートします。それを使用すると接続できますUNIXドメインストリームソケットまたはUNIXドメインデータグラムソケットだから、netcatにソケットタイプを教えてください。

たとえば、/dev/logLinuxのファイルは次のようになります。UNIXドメインデータグラムソケットソケット、したがってnc -U /dev/log 動作しません。代わりに、nc -uU /dev/log-Uと一緒に-uを使用して、netcatにUNIXドメインデータグラムソケットであることを知らせます。

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


同様に、使用する場合はsocatUNIX-CLIENTオプションを使用してください。このオプションを使用すると、両方に接続できますUNIXドメインフローそしてUNIXドメインデータグラムソケット。マニュアルページから(マンソカート)最初に接続しようとして失敗した場合はデータグラムソケットであると仮定するため、両方のタイプがサポートされます。」。

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

答え4

busyboxのみがインストールされているシステムを使用している場合は、Unixドメインソケットをサポートしていないようですが(-Uオプションは存在しません)、次のことがうまくいくようです。

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

これは、アルパインコンテナのヘルスチェックを作成するのに非常に便利です。

関連情報