저는 Debian Squeeze 웹 서버를 운영하고 있습니다. 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 웹 서버에는 이러한 옵션이 존재하지 않습니다.
답변1
그리고socat
("두 데이터 채널 간 양방향 데이터 릴레이") 다음과 같이 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
이는 알파인 컨테이너에 대한 상태 확인을 만드는 데 매우 유용합니다.