web-dev-qa-db-ja.com

Debian Squeezeのシェルを介してUnixドメインソケットと通信するにはどうすればよいですか?

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を実行している)では、nctelnetの両方に、ドメインソケットを使用するオプション(それぞれ-U-u)があります。ただし、私のDebian Squeeze Webサーバーでは、これらのオプションはありません。

105
Paul D. Waite

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

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

76
derobert

socat (「2つのデータチャネル間の双方向データリレー」)を使用すると、次のようにUNIXドメインソケットに接続できます。

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

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
22
Sahil Singh

Debianでは socat を使用できます。それをインストールするには:

# apt-get install socat
15
sendmoreinfo

Busyboxのみがインストールされているシステムを使用している場合、UNIXドメインソケットをサポートしていないように見えるかもしれませんが(-Uオプションが存在しない)、次のように動作します。

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

これは、Alpineコンテナーのヘルスチェックを作成するのに非常に役立ちます。

3
Greg Bray