systemd: запуск служб по запросу, таких как postgresql и mysql, которые еще не поддерживают активацию на основе сокетов


8

На моем ноутбуке я использую MySQL и PostgreSQL только для тестирования. Они мне не нужны, пока я не начну программировать, что может произойти через несколько часов после запуска. Но запускать службы вручную и вводить мой пароль sudo - (незначительное) раздражение.

Я читал, что systemd поддерживает запуск служб только при доступе к порту для этой службы. Но быстрый поиск в Google, похоже, показывает, что активация на основе сокетов еще не поддерживается в PG & MySQL.

Я понимаю, что могу взломать это с помощью сценариев оболочки или подождать, пока сопровождающие исправят сервисы, но сейчас я ищу лучший способ (в образовательных целях).

Вопрос: Как я могу добиться запуска таких сервисов по требованию так, чтобы они либо использовали функции systemd, либо рекомендовались в качестве «лучшей практики» Linux?

Некоторые мысли:

  • Могу ли я установить службу, которая обрабатывает службы автоматического запуска и автоматической остановки в зависимости от условий (например, запуска конкретного процесса)?
  • Существует ли прокси-служба, которая активируется сокетом и, в свою очередь, запускает целевую службу?

systemd 229, Kubuntu 16.04, MySQL 5.7, PostgreSQL 9.5

Обновление: ответ:

Как я использовал systemd-socket-proxyd в соответствии с предложением 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

Перезагрузить / остановить / запустить при необходимости:

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

Тестовое задание:

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

Ответы:



3

Активация на основе сокетов еще не поддерживается в PostgreSQL и MySQL.

Вопрос есть ответ. Вы уже нашли лучший способ, упомянули об этом в вопросе, а затем заявили, что он не был реализован. Oracle закрыл вопрос, заявив, что активация сокетов (на самом деле, с использованием уже открытых дескрипторов прослушивающих файлов вместо открытия своих собственных, поскольку это касается серверной программы) была реализована, когда это не было. MariaDB имеет еще открытый вопрос. Что касается PostgreSQL, вы находитесь в одной лодке с Кристофом Бергом, ожидая, когда это будет реализовано.

дальнейшее чтение


Спасибо, но суть моего вопроса заключается в том, чтобы выяснить, как добиться этого сейчас, для любых подобных услуг. Я уточню это в моем вопросе.
Олег
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.