Sur mon ordinateur portable, j'utilise MySQL et PostgreSQL uniquement pour les tests. Je n'en ai pas besoin jusqu'à ce que je commence la programmation, ce qui peut prendre des heures après le démarrage. Mais démarrer les services manuellement et taper mon mot de passe sudo est une gêne (mineure).
J'ai lu que systemd ne prend en charge le démarrage des services que lorsque le port de ce service est accessible. Mais une recherche rapide sur Google semble indiquer que l'activation basée sur socket n'est pas encore prise en charge dans PG et MySQL.
Je me rends compte que je peux pirater cela en utilisant des scripts shell ou attendre que les mainteneurs réparent les services, mais je cherche maintenant un meilleur moyen (à des fins éducatives).
La question: Comment puis-je réaliser le démarrage à la demande de ces services d'une manière qui utilise les fonctionnalités de systemd ou est recommandée comme «meilleure pratique» Linux?
Quelques idées:
- Existe-t-il un service que je peux installer qui gère les services de démarrage et d'arrêt automatiques en fonction des conditions (comme un processus particulier en cours d'exécution)?
- Existe-t-il un service proxy qui est activé par un socket et lance à son tour le service cible?
systemd 229, Kubuntu 16.04, MySQL 5.7, PostgreSQL 9.5
Mise à jour: la réponse:
Comment j'ai utilisé systemd-socket-proxyd comme suggéré par 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
Recharger / arrêter / démarrer au besoin:
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
Tester:
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