systemd:尚不支持基于套接字的激活的按需启动服务,例如postgresql和mysql


8

在笔记本电脑上,我仅使用MySQL和PostgreSQL进行测试。在开始编程之前(在启动后可能需要几个小时),我不需要它们。但是手动启动服务并输入我的sudo密码是一个(小)麻烦。

我读到systemd仅在访问该服务的端口时才支持启动服务。但是Google快速搜索似乎表明PG&MySQL还不支持基于套接字的激活。

我知道我可以使用shell脚本破解此代码,也可以等待维护者修复服务,但是现在(出于教育目的)我正在寻找一种更好的方法。

问题:如何以一种利用系统功能或被推荐为Linux“最佳实践”的方式来实现此类服务的按需启动?

一些想法:

  • 我可以安装一项服务来根据条件(例如正在运行的特定进程)来处理自动启动和自动停止服务吗?
  • 是否存在由套接字激活并依次启动目标服务的代理服务?

systemd 229,Kubuntu 16.04,MySQL 5.7,PostgreSQL 9.5

更新:答案:

我如何使用Siosm建议的systemd-socket-proxyd:

/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

Answers:



3

PostgreSQL和MySQL尚不支持基于套接字的激活。

问题是答案。您已经找到了更好的方法,在问题中提到了它,然后指出它尚未实现。Oracle解决了一个问题,即尚未进行套接字激活(实际上,就服务器程序而言,实际上是使用已打开的侦听文件描述符,而不是打开它自己的套接字)。MariaDB还有一个尚待解决的问题。至于PostgreSQL,您和Christoph Berg处于同一条船上,等待实现。

进一步阅读


谢谢,但是我的问题的全部重点是弄清楚如何为任何此类服务实现这一目标。我将在我的问题中澄清这一点。
Oleg
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.