Você pode usar a ferramenta systemd-socket-proxyd. Veja systemd-socket-proxyd (8) para exemplos.
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:
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
Você pode usar a ferramenta systemd-socket-proxyd. Veja systemd-socket-proxyd (8) para exemplos.
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.