Di laptop saya, saya menggunakan MySQL dan PostgreSQL hanya untuk pengujian. Saya tidak membutuhkannya sampai saya memulai pemrograman, yang mungkin berjam-jam setelah startup. Tetapi memulai layanan secara manual dan mengetikkan kata sandi sudo saya adalah gangguan (kecil).
Saya membaca bahwa systemd mendukung layanan awal hanya ketika port untuk layanan itu diakses. Tetapi pencarian Google yang cepat tampaknya menunjukkan bahwa aktivasi berbasis soket belum didukung di PG & MySQL.
Saya menyadari bahwa saya dapat meretas ini menggunakan skrip shell atau menunggu pengelola untuk memperbaiki layanan, tetapi saya sedang mencari cara yang lebih baik sekarang (untuk tujuan pendidikan).
Pertanyaannya: Bagaimana saya dapat mencapai startup on-demand dari layanan seperti itu dengan cara yang memanfaatkan fitur systemd atau direkomendasikan sebagai "praktik terbaik" Linux?
Beberapa pemikiran:
- Apakah ada layanan yang dapat saya instal yang menangani layanan mulai otomatis dan berhenti otomatis berdasarkan kondisi (seperti proses berjalan tertentu)?
- Apakah ada layanan proxy yang diaktifkan oleh soket dan pada gilirannya meluncurkan layanan target?
systemd 229, Kubuntu 16.04, MySQL 5.7, PostgreSQL 9.5
Pembaruan: Jawaban:
Bagaimana saya menggunakan systemd-socket-proxyd seperti yang disarankan oleh 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
Muat ulang / berhenti / mulai sesuai kebutuhan:
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
Uji:
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