Sul mio laptop, utilizzo MySQL e PostgreSQL solo per i test. Non mi servono fino a quando non inizio la programmazione, che potrebbe essere ore dopo l'avvio. Ma avviare i servizi manualmente e digitare la mia password sudo è un fastidio (minore).
Ho letto che systemd supporta l'avvio di servizi solo quando si accede alla porta per quel servizio. Ma una rapida ricerca su Google sembra indicare che l'attivazione basata su socket non è ancora supportata in PG e MySQL.
Mi rendo conto di poter hackerare questo tramite script di shell o aspettare che i manutentori riparino i servizi, ma ora sto cercando un modo migliore (per scopi educativi).
La domanda: come posso ottenere l'avvio su richiesta di tali servizi in un modo che utilizzi le funzionalità di sistema o sia raccomandato come "best practice" di Linux?
Alcuni pensieri:
- Esiste un servizio che posso installare che gestisce i servizi di avvio e arresto automatici in base a condizioni (come un particolare processo in esecuzione)?
- Esiste un servizio proxy che viene attivato da un socket e a sua volta avvia il servizio di destinazione?
systemd 229, Kubuntu 16.04, MySQL 5.7, PostgreSQL 9.5
Aggiornamento: la risposta:
Come ho usato systemd-socket-proxyd come suggerito da 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
Ricarica / ferma / avvia se necessario:
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
Test:
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