Inicia um serviço em uma solicitação de rede (ativação de soquete)

4

Eu tenho um programa que, sob a ativação normal, escuta em alguma porta.

Eu não quero que o programa seja executado continuamente.

Existe uma maneira "rápida e suja" de agrupar o aplicativo em um script de shell ou semelhante que monitore a porta apropriada e inicie o serviço sob demanda?

A abordagem mais simples provavelmente levaria à falha da conexão, já que o wrapper teria que liberar a porta e iniciar o aplicativo. Se o cliente simplesmente se conectar novamente pouco tempo depois, tudo poderá funcionar.

Mas é claro que seria ainda melhor se tudo isso fosse completamente transparente para o cliente.

    
por user50849 27.10.2014 / 20:04

2 respostas

5

Como richard já mencionou , o que você está procurando existe há muito tempo. Chama-se inetd .

Existem várias implementações do inetd ao redor. Alguns são simples e fazem exatamente essa coisa de ativação de soquete (eles são geralmente apenas o programa inetd de algum pacote de software maior contendo outras ferramentas básicas de rede, como GNU inetutils ou BusyBox ou ferramentas BSD que foram portadas para o Linux), algumas oferecem mais os recursos ( xinetd são bastante populares, O rlinetd se descreve como “horrivelmente super-caracterizado”), e há uma implementação do inetd em systemd (o que não implementa o systemd?).

Quase todo sistema unix vem com uma implementação inetd. Tradicionalmente, serviços “pequenos” como echo, finger, ftp, etc. usaram o inetd, enquanto serviços “grandes” como httpd e NFS e helpers, assim como ssh, não o fizeram. Use a implementação inetd padrão da sua distribuição, a menos que você precise de mais do que o serviço básico.

    
por 29.10.2014 / 01:31
1

Também é possível pedir ao systemd para abrir um socket (seja TCP, UDP ou unix AF) e então iniciar um serviço quando uma conexão é recebida. Como nem todos os serviços estão satisfeitos em passarem pelos soquetes existentes e preferirem criar os próprios, o systemd também inclui um auxiliar chamado systemd-socket-proxyd que armazena o conteúdo no soquete systemd-open até que o soquete de escuta correto seja comprado on-line pelo serviço solicitado .

Veja como.

    
por 25.11.2016 / 15:05