systemd: inicio bajo demanda de servicios como postgresql y mysql que aún no admiten la activación basada en sockets

8

En mi computadora portátil, uso MySQL y PostgreSQL solo para las pruebas. No los necesito hasta que empiezo a programar, lo que podría pasar horas después del inicio. Pero iniciar los servicios manualmente y escribir mi contraseña de sudo es una molestia (menor).

Leí que systemd admite el inicio de servicios solo cuando se accede al puerto para ese servicio. Pero una búsqueda rápida en Google parece indicar que la activación basada en sockets aún no es compatible con PG & MySQL.

Me doy cuenta de que puedo hackear esto usando scripts de shell o esperar a que los encargados de la reparación arreglen los servicios, pero ahora estoy buscando una mejor manera (con fines educativos).

La pregunta: ¿Cómo puedo lograr el inicio a pedido de dichos servicios de una manera que utilice funciones de systemd o se recomiende como una "mejor práctica" de Linux?

Algunos pensamientos:

  • ¿Hay algún servicio que pueda instalar que maneje los servicios de inicio automático y detención automática en función de las condiciones (como un proceso en particular en ejecución)?
  • ¿Existe un servicio proxy que se activa mediante un socket y, a su vez, inicia el servicio de destino?

systemd 229, Kubuntu 16.04, MySQL 5.7, PostgreSQL 9.5

Actualización: la respuesta:

Cómo usé systemd-socket-proxyd como lo sugiere 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

Recargar / detener / iniciar según sea necesario:

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

Prueba:

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
Oleg
fuente

Respuestas:

3

la activación basada en socket todavía no es compatible con PostgreSQL y MySQL.

La pregunta es la respuesta. Ya ha encontrado la mejor manera, lo mencionó en la pregunta y luego declaró que no se ha implementado. Oracle cerró el problema diciendo que la activación del socket (realmente, usando descriptores de archivos de escucha ya abiertos en lugar de abrir los suyos, en lo que respecta al programa del servidor) se ha implementado cuando no se ha implementado. MariaDB tiene un problema aún abierto. En cuanto a PostgreSQL, estás en el mismo barco que Christoph Berg esperando que esto se implemente.

Otras lecturas

JdeBP
fuente
Gracias, pero el objetivo de mi pregunta es descubrir cómo lograr esto ahora, para tales servicios. Aclararé esto en mi pregunta.
Oleg