systemd“套接字激活”与 xinetd

systemd“套接字激活”与 xinetd

我使用xinetd并且它适合我的目的。然而我最近发现 systemd 有一个内置的东西叫做“套接字激活”。

这两个看起来非常相似,但 systemd 是“官方的”并且似乎是更好的选择。

但在使用之前,它们真的一样吗?我应该注意哪些差异?

例如,我只想在第一次请求时启动一些 dockerized 服务 - 我的第一个想法是使用 xinetd。但是套接字激活是否更好/更快/更稳定/等等?

答案1

xinetd单独考虑时,我不认为 systemd 套接字激活明显优于激活;后者也很稳定并且已经存在了更长时间。套接字激活对于服务解耦来说确实很有趣:它允许服务并行启动,即使它们需要通信,并且它允许服务独立重新启动。

如果您有支持 -style 激活的服务xinetd,则可以将其与套接字激活一起使用:.socket描述with 的Accept=true行为方式与 相同xinetd。您还需要一个.service文件来描述该服务。 systemd 套接字激活的全部好处需要提供服务的守护进程的支持。看关于该主题的博客文章

我的建议往往是“如果它没有损坏,就不要修复它”,但如果您想将xinetd基于 的服务转换为 systemd,这当然是可行的。

答案2

您可以使用xinetdsystemd来激活套接字,两者都可以使用。我个人觉得xinetd更容易使用,因为所有内容都在一个文件中,但也使用过,systemd因为它更灵活,特别是侦听多个地址和套接字转发到 UNIX 套接字而不仅仅是 IP 套接字。

这里作为一个例子,我用来将 TCP 连接转发到 MySQL 文件套接字:

/etc/systemd/system/mysql-proxy.service

[Unit]                                                  
Description=MySql Proxy Service
Requires=mysql-proxy.socket

[Service]
Environment=MYSQL_PROXY_TARGET=/var/run/mysql/mysql.sock
EnvironmentFile=-/etc/sysconfig/mysql-proxy
ExecStart=/usr/lib/systemd/systemd-socket-proxyd ${MYSQL_PROXY_TARGET}

/etc/systemd/system/mysql-proxy.socket

[Unit]                                                  
Description=MySql Proxy Socket

[Socket]
ListenStream=192.168.1.1:3306
ListenStream=192.168.2.1:3306
NoDelay=true
FreeBind=true

[Install]
WantedBy=sockets.target

传统的转发需求Accept=truesystemd感知进程应该在一个进程中处理多个连接,或者根据需要分叉其他进程。

相关内容