Como criar um serviço no Linux que possa lidar com consultas?

Como criar um serviço no Linux que possa lidar com consultas?

Quero criar um serviço Linux e poder me comunicar com ele. Algo como um banco de dados que posso adicionar e obter dados. Existe alguma maneira de me comunicar com meu serviço sem torná-lo um servidor? Quero dizer, não use métodos httpou httpspara enviar e obter dados. O que eu quero é uma maneira de me conectar ao serviço sem usar um número URLe port.

Responder1

Acho que a resposta que você está procurando é usarsystemd.socket

Digamos que eu tenha algum programa que leia stdin e grave em stdout. Você pode configurar o systemd para torná-lo acessível através de um soquete.

Aqui está um exemplo de como você configuraria o systemd para fazer isso:

# /etc/systemd/system/simple.socket
[Socket]
Accept=yes
ListenStream=11111

# /etc/systemd/system/[email protected]
[Unit]
Description="Simple service"
After=network.target simple.socket
Requires=simple.socket

[Service]
Type=simple
ExecStart=-cat -
StanardInput=socket
StandardOutput=socket

Em seguida, inicie o soquete com:

$ sudo systemctl start simple.socket

Agora você pode executar o serviço estabelecendo um soquete. Eu uso ncou netcatpara isso:

$ nc 127.0.0.1 11111

Em ExecStarteu escolho usar cat -o qual simplesmente retransmite stdin para stdout. Quando executarmos nc, descobriremos que tudo o que digitarmos em stdin será retornado para nós via stdout. Você provavelmente tem um aplicativo mais interessante que deseja executar.

Alguns outros pontos interessantes:

  • catnão está em execução se você não tiver um soquete aberto (o soquete está escutando, mas o serviço está parado).
  • Quando você estabelece uma conexão, o serviço é iniciado
  • Se você estabelecer outra conexão, outra instância do serviço será iniciada.
  • Quando você fecha uma conexão, o serviço é interrompido.

Responder2

Sempre que algo está recebendo conexões, você tem um servidor. HTTP/S é apenas um protocolo entre muitos, muitos. Você também pode se conectar a um banco de dados remoto por meio de seu próprio protocolo. Se você estiver procurando uma solução mais complexa, leia sobre tunelamento SSH - direto e reverso. E systemdnão é de forma alguma um elemento obrigatório na sua solução.

Responder3

Se você deseja acessar isso apenas em sua máquina local e deseja criar scripts simples, use um fifo. Se você quiser que outros sistemas na rede também tenham acesso, consulte netcat ( nc).

Para adeptos de Python, existe o Flask, e para programadores de Perl, o Dancer2.

Em C, você usaria socket, binde listen.

E como observou @tom: systemdnão tem nada a ver com o que você está pedindo.

EDITAR:

Sua adição

O que eu quero é uma maneira de me conectar ao serviço, exceto um URL e um número de porta.

torna completamente claro o que você está procurando.

Se quiser se comunicar com um computador, você deve saber seu endereço. Caso contrário, você nunca saberá com quem está se comunicando. Seu banco de dados e seu cliente também devem ter um protocolo acordado. Caso contrário, eles não se entenderão. E com isso, você tem necessariamente um URI.

Se você não quiser usar um número de porta, como TCP ou UDP, você pode usar outro protocolo (https://www.iana.org/assignments/protocol-numbers/protocol-numbers.xhtml) se isso lhe convier. 253 ou 254 seriam então adequados. Mas, e por favor, não tome isso como paternalista, você ainda não parece ter a habilidade necessária para fazer isso funcionar.

Se você seguir as recomendações, tente primeiro usar um fifo no mesmo sistema. Se funcionar, investigue no netcat.

informação relacionada