Auf meinem Laptop verwende ich MySQL und PostgreSQL nur zum Testen. Ich brauche sie erst, wenn ich mit dem Programmieren beginne, möglicherweise Stunden nach dem Start. Das manuelle Starten der Dienste und das Eingeben meines sudo-Passworts ist jedoch (geringfügig) ärgerlich.
Ich habe gelesen, dass systemd das Starten von Diensten nur unterstützt, wenn auf den Port für diesen Dienst zugegriffen wird. Eine schnelle Google-Suche scheint jedoch darauf hinzudeuten, dass die Socket-basierte Aktivierung in PG & MySQL noch nicht unterstützt wird.
Mir ist klar, dass ich dies mithilfe von Shell-Skripten hacken oder warten kann, bis die Betreuer die Dienste repariert haben, aber ich suche jetzt nach einem besseren Weg (für Bildungszwecke).
Die Frage: Wie kann ich einen On-Demand-Start solcher Dienste auf eine Weise erreichen, die entweder systemd-Funktionen nutzt oder als "Best Practice" für Linux empfohlen wird?
Einige Gedanken:
- Gibt es einen Dienst, den ich installieren kann, der Dienste zum automatischen Starten und automatischen Stoppen basierend auf Bedingungen (z. B. einem bestimmten laufenden Prozess) verwaltet?
- Gibt es einen Proxy-Dienst, der von einem Socket aktiviert wird und den Zieldienst startet?
systemd 229, Kubuntu 16.04, MySQL 5.7, PostgreSQL 9.5
Update: Die Antwort:
Wie ich systemd-socket-proxyd verwendet habe, wie von Siosm vorgeschlagen:
/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
Nach Bedarf neu laden / stoppen / starten:
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
Prüfung:
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