나는 사용 xinetd
하고 내 목적에 적합합니다. 그러나 최근 systemd에 "소켓 활성화"라는 기능이 내장되어 있다는 사실을 발견했습니다.
이 둘은 매우 비슷해 보이지만 systemd는 "공식적"이므로 더 나은 선택인 것 같습니다.
하지만 사용하기 전에는 정말 똑같을까요? 어떤 차이점을 알고 있어야 합니까?
예를 들어, 첫 번째 요청에서 도킹된 서비스를 시작하고 싶습니다. 첫 번째 아이디어는 xinetd를 사용하는 것입니다. 그러나 소켓 활성화가 더 좋고/빠르고/더 안정적입니까?
답변1
xinetd
별도로 고려할 때 시스템 소켓 활성화가 활성화보다 훨씬 낫다고 생각하지 않습니다. 후자도 안정적이고 더 오래되었습니다. 소켓 활성화는 서비스 분리에 있어서 매우 흥미롭습니다. 이를 통해 서비스가 통신이 필요한 경우에도 서비스를 병렬로 시작할 수 있으며 서비스를 독립적으로 다시 시작할 수 있습니다.
-style 활성화를 지원하는 서비스가 있는 경우 xinetd
소켓 활성화와 함께 사용할 수 있습니다..socket
설명하다with 는 Accept=true
와 같은 방식으로 동작합니다 xinetd
. .service
서비스를 설명하는 파일 도 필요합니다 . 시스템 소켓 활성화의 모든 이점을 누리려면 서비스를 제공하는 데몬의 지원이 필요합니다. 바라보다이 주제에 대한 블로그 게시물.
내 조언은 "고장나지 않았다면 고치지 마세요"라는 경향이 있지만 xinetd
systemd 기반 서비스를 변환하려는 경우 이는 확실히 가능합니다.
답변2
xinetd
또는 를 사용하여 소켓을 활성화할 수 있으며 systemd
둘 다 작동합니다. 개인적으로 xinetd
모든 것이 하나의 파일에 있기 때문에 사용하기가 더 쉽다고 생각하지만 systemd
, 특히 여러 주소를 수신하고 IP 소켓 문자 대신 소켓을 UNIX 소켓으로 전달하는 것이 더 유연하기 때문에 사용됩니다.
다음은 TCP 연결을 MySQL 파일 소켓으로 전달하는 데 사용하는 예입니다.
/etc/systemd/system/mysql-proxy.service
[Unit]
Description=MySql Proxy Service
Requires=mysql-proxy.socket
[Service]
Environment=MYSQL_PROXY_TARGET=/var/run/mysql/mysql.sock
EnvironmentFile=-/etc/sysconfig/mysql-proxy
ExecStart=/usr/lib/systemd/systemd-socket-proxyd ${MYSQL_PROXY_TARGET}
/etc/systemd/system/mysql-proxy.socket
[Unit]
Description=MySql Proxy Socket
[Socket]
ListenStream=192.168.1.1:3306
ListenStream=192.168.2.1:3306
NoDelay=true
FreeBind=true
[Install]
WantedBy=sockets.target
기존 전달 요구 사항 Accept=true
, systemd
인식 프로세스는 단일 프로세스에서 여러 연결을 처리하거나 필요에 따라 다른 프로세스를 분기해야 합니다.