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