systemd: início sob demanda de serviços como postgresql e mysql que ainda não suportam a ativação baseada em soquete

8

No meu laptop, eu uso o MySQL e o PostgreSQL apenas para testes. Não preciso deles até iniciar a programação, o que pode levar horas após a inicialização. Mas iniciar os serviços manualmente e digitar minha senha do sudo é um aborrecimento (menor).

Li que o systemd suporta serviços iniciados apenas quando a porta para esse serviço é acessada. Mas uma rápida pesquisa no Google parece indicar que a ativação baseada em soquete ainda não é suportada no PG & MySQL.

Sei que posso hackear isso usando scripts de shell ou esperar que os mantenedores consertem os serviços, mas estou procurando uma maneira melhor agora (para fins educacionais).

A pergunta: como posso obter a inicialização sob demanda desses serviços de uma maneira que utilize os recursos do systemd ou seja recomendada como uma "melhor prática" do Linux?

Alguns pensamentos:

  • Existe um serviço que eu possa instalar que lide com os serviços de inicialização e parada automáticas com base nas condições (como um processo específico em execução)?
  • Existe um serviço de proxy que é ativado por um soquete e, por sua vez, inicia o serviço de destino?

systemd 229, Kubuntu 16.04, MySQL 5.7, PostgreSQL 9.5

Atualização: A resposta:

Como eu usei systemd-socket-proxyd como sugerido pelo Siosm:

/etc/mysql/mysql.conf.d/mysqld.cnf

port        = 13306

/etc/systemd/system/proxy-to-mysql.socket

[Socket]
ListenStream=0.0.0.0:3306

[Install]
WantedBy=sockets.target

/etc/systemd/system/proxy-to-mysql.service

[Unit]
Requires=mysql.service
After=mysql.service

[Service]
# note: this path may vary
ExecStart=/lib/systemd/systemd-socket-proxyd 127.0.0.1:13306
PrivateTmp=no
PrivateNetwork=no

Recarregue / pare / inicie conforme necessário:

sudo systemctl daemon-reload
sudo systemctl enable proxy-to-mysql.socket
sudo systemctl start proxy-to-mysql.socket
sudo systemctl stop mysql.service  # for testing

Teste:

sudo systemctl status proxy-to-mysql.socket # should be ACTIVE
sudo systemctl status proxy-to-mysql # should be INACTIVE
sudo systemctl status mysql # should be INACTIVE
telnet 127.0.0.1 3306
sudo systemctl status proxy-to-mysql # should be ACTIVE
sudo systemctl status mysql # should be ACTIVE
Oleg
fonte

Respostas:

3

A ativação baseada em soquete ainda não é suportada no PostgreSQL e MySQL.

A pergunta é a resposta. Você já encontrou o melhor caminho, o mencionou na pergunta e afirmou que não foi implementado. A Oracle encerrou o problema dizendo que a ativação do soquete (na verdade, usando descritores de arquivos de escuta já abertos, em vez de abrir seus próprios, no que diz respeito ao programa do servidor) foi implementada quando não era. O MariaDB ainda tem um problema em aberto. Quanto ao PostgreSQL, você está no mesmo barco que Christoph Berg esperando que isso seja implementado.

Leitura adicional

JdeBP
fonte
Obrigado, mas o ponto principal da minha pergunta é descobrir como conseguir isso agora, para esses serviços. Vou esclarecer isso na minha pergunta.
Oleg