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

7

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

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

Eu percebo 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 conseguir a inicialização sob demanda desses serviços de uma forma que use recursos do systemd ou seja recomendada como uma "melhor prática" do Linux?

Algumas ideias:

  • Existe um serviço que eu possa instalar que lide com os serviços de início automático e de interrupção automática 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, lança 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 por 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
    
por Oleg 19.03.2017 / 21:53

2 respostas

4

Você pode usar a ferramenta systemd-socket-proxyd. Veja systemd-socket-proxyd (8) para exemplos.

    
por 07.04.2017 / 11:09
3

socket-based activation is not yet supported in PostgreSQL & MySQL.

A questão é a resposta. Você já encontrou o melhor caminho, mencionou na pergunta e depois afirmou que ele não foi implementado. A Oracle fechou 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 estava. MariaDB tem um problema ainda em aberto. Quanto ao PostgreSQL, você está no mesmo barco que Christoph Berg esperando para que isso seja implementado.

Leitura adicional

por 19.03.2017 / 23:55