systemd: dimulainya layanan berdasarkan permintaan seperti postgresql dan mysql yang belum mendukung aktivasi berbasis soket

8

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

Jawaban:

3

aktivasi berbasis soket belum didukung di PostgreSQL & MySQL.

Pertanyaannya adalah jawabannya. Anda telah menemukan cara yang lebih baik, menyebutkannya dalam pertanyaan, dan kemudian menyatakan bahwa itu belum dilaksanakan. Oracle menutup masalah dengan mengatakan bahwa aktivasi soket (benar-benar, menggunakan deskriptor file pendengaran yang sudah dibuka alih-alih membuka sendiri, sejauh menyangkut program server) telah dilaksanakan ketika belum. MariaDB memiliki masalah yang masih terbuka. Adapun PostgreSQL, Anda berada di kapal yang sama dengan Christoph Berg menunggu ini diimplementasikan.

Bacaan lebih lanjut

JdeBP
sumber
Terima kasih, tetapi inti dari pertanyaan saya adalah untuk mencari tahu bagaimana mencapai ini sekarang, untuk layanan semacam itu. Saya akan menjelaskan ini dalam pertanyaan saya.
Oleg