Debian Squeeze Webサーバーを実行しています。 memcachedをインストールし、同じサーバー上にあるWebサイトからメッセージを受信するだけなので、memcachedをUnixドメインソケット(/tmp/memcached.sock
)でリッスンするように設定しました。
正常に動作しているようですが、シェルを介してmemcachedと通信し、動作していることを確認します。
memcachedは単純なASCIIプロトコルを介してメッセージを受け入れます(私が正しく理解している場合)。TCP/ IPでリッスンしている場合、たとえばnc
を介してメッセージを送信できます:
$ echo "stats settings" | nc localhost 11211
しかし、そのテキストをドメインソケットに送信する方法がわかりません。
私のラップトップ(OS X Lionを実行している)では、nc
とtelnet
の両方に、ドメインソケットを使用するオプション(それぞれ-U
と-u
)があります。ただし、私のDebian Squeeze Webサーバーでは、これらのオプションはありません。
netcat-openbsd
には、-U
オプションがあります。お持ちでない場合は、おそらくnetcat-traditional
がインストールされている可能性があります。切り替えをお勧めします。
コマンド例:nc -U /var/run/socket
socat
(「2つのデータチャネル間の双方向データリレー」)を使用すると、次のようにUNIXドメインソケットに接続できます。
$ socat - UNIX-CONNECT:/tmp/memcached.sock
netcat-openbsd
は、UNIXドメインソケットへの接続をサポートしています。これを使用すると、UNIXドメインストリームソケットまたはUNIXドメインデータグラムソケットのいずれかに接続できるため、以下を行う必要があります。ソケットのタイプをnetcatに伝えます。
たとえば、Linuxの/dev/log
ファイルは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
同様に、socat
を使用する場合は、UNIX-CLIENTオプションを使用します。このオプションを使用すると、UNIXドメインストリームとUNIXドメインデータグラムソケットの両方に接続できます。そのmanページから(man socat)、 "最初に接続を試み、失敗した場合はデータグラムソケットであると想定し、両方をサポートしますタイプ"。
socat - UNIX-CLIENT:/dev/socket #connect to UNIX-domain socket, irrespective of its type
Debianでは socat を使用できます。それをインストールするには:
# apt-get install socat
Busyboxのみがインストールされているシステムを使用している場合、UNIXドメインソケットをサポートしていないように見えるかもしれませんが(-U
オプションが存在しない)、次のように動作します。
$ echo "stats slabs" | nc local:/tmp/memcached.sock
STAT active_slabs 0
STAT total_malloced 0
END
これは、Alpineコンテナーのヘルスチェックを作成するのに非常に役立ちます。