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