私は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-openbsd
UNIXドメインソケット接続をサポートします。それを使用すると接続できますUNIXドメインストリームソケットまたはUNIXドメインデータグラムソケットだから、netcatにソケットタイプを教えてください。
たとえば、/dev/log
Linuxのファイルは次のようになります。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ドメインデータグラムソケット。マニュアルページから(マンソカート)」最初に接続しようとして失敗した場合はデータグラムソケットであると仮定するため、両方のタイプがサポートされます。」。
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
これは、アルパインコンテナのヘルスチェックを作成するのに非常に便利です。