systemd: avvio su richiesta di servizi come postgresql e mysql che non supportano ancora l'attivazione basata su socket


8

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

Risposte:



3

l'attivazione basata su socket non è ancora supportata in PostgreSQL e MySQL.

La domanda è la risposta Hai già trovato il modo migliore, lo hai menzionato nella domanda e poi hai affermato che non è stato implementato. Oracle ha chiuso il problema dicendo che l'attivazione del socket (in realtà, usando descrittori di file di ascolto già aperti invece di aprirne uno proprio, per quanto riguarda il programma server) è stata implementata quando non lo è stata. MariaDB ha un problema ancora aperto. Per quanto riguarda PostgreSQL, sei nella stessa barca di Christoph Berg in attesa che venga implementato.

Ulteriori letture


Grazie, ma il punto centrale della mia domanda è capire come raggiungerlo ora, per tali servizi. Chiarirò questo nella mia domanda.
Oleg,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.