Eu uso xinetd
e funciona para os meus propósitos. No entanto, descobri recentemente que o systemd tem algo embutido chamado "ativação de soquete".
Esses dois parecem muito semelhantes, mas o systemd é "oficial" e parece ser a melhor escolha.
No entanto, antes de usá-lo, eles são realmente os mesmos? Existem diferenças que eu deveria estar ciente?
Por exemplo, eu quero iniciar alguns serviços dockerizados somente quando eles forem solicitados pela primeira vez - meu primeiro pensamento seria usar o xinetd. Mas a ativação do soquete é melhor/mais rápida/mais estável/qualquer que seja?
Eu não acho que a ativação do soquete do systemd seja significativamente melhor do que a
xinetd
ativação, quando considerada isoladamente; o último também é estável e existe há mais tempo. A ativação de soquete é realmente interessante para desacoplamento de serviços: permite que os serviços sejam iniciados em paralelo, mesmo que precisem se comunicar, e permite que os serviços sejam reiniciados de forma independente.Se você tiver um serviço que suporte
xinetd
ativação de estilo, ele pode ser usado com ativação de soquete: uma.socket
descrição comAccept=true
se comportará da mesma maneira quexinetd
. Você também precisará de um.service
arquivo para descrever o serviço. Os benefícios completos da ativação do soquete systemd requerem suporte no daemon que fornece o serviço. Veja o post do blog sobre o tema .Meu conselho tende a ser “se não estiver quebrado, não conserte”, mas se você quiser converter um
xinetd
serviço baseado em systemd, certamente é viável.Você pode usar
xinetd
ousystemd
para ativação de soquete, ambos funcionarão. Pessoalmente, achoxinetd
mais fácil de usar porque tudo está em um arquivo, mas também useisystemd
porque é mais flexível, especialmente com escuta em vários endereços e encaminhamento de soquetes para soquetes UNIX e não apenas para soquetes IP.Aqui, como exemplo, usei para encaminhar a conexão TCP para o soquete do arquivo MySQL:
/etc/systemd/system/mysql-proxy.service
/etc/systemd/system/mysql-proxy.socket
As necessidades de encaminhamento tradicionais
Accept=true
,systemd
os processos cientes devem lidar com várias conexões em um processo ou bifurcar processos adicionais conforme necessário.