lonix Asked: 2018-09-24 05:39:20 +0800 CST2018-09-24 05:39:20 +0800 CST 2018-09-24 05:39:20 +0800 CST systemd“套接字激活”与 xinetd 772 我使用xinetd它,它适用于我的目的。然而,我最近发现 systemd 内置了一个叫做“socket activation”的东西。 这两者看起来非常相似,但 systemd 是“官方的”,似乎是更好的选择。 但是在使用之前,它们真的一样吗?我应该注意哪些差异? 例如,我只想在第一次请求时启动一些 dockerised 服务——我的第一个想法是使用 xinetd。但是套接字激活更好/更快/更稳定/什么? linux ubuntu 2 个回答 Voted Best Answer Stephen Kitt 2018-09-24T05:56:52+08:002018-09-24T05:56:52+08:00 单独考虑时,我认为 systemd 套接字激活并不比xinetd激活好得多;后者也很稳定,并且已经存在了更长的时间。套接字激活对于服务解耦来说非常有趣:它允许服务并行启动,即使它们需要通信,它允许服务独立重启。 如果您有一个支持xinetd-style 激活的服务,它可以与套接字激活一起使用:带有 的.socket描述的Accept=true行为方式与xinetd. 您还需要一个.service文件来描述该服务。systemd 套接字激活的全部好处需要提供服务的守护进程的支持。请参阅有关该主题的博客文章。 我的建议往往是“如果它没有损坏,就不要修复它”,但如果你想将xinetd基于 - 的服务转换为 systemd,这当然是可行的。 RalfFriedl 2018-09-24T06:05:43+08:002018-09-24T06:05:43+08:00 您可以使用其中一个xinetd或systemd用于套接字激活,两者都可以。我个人觉得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=true,systemd感知进程应该在一个进程中处理多个连接或根据需要分叉额外的进程。
单独考虑时,我认为 systemd 套接字激活并不比
xinetd
激活好得多;后者也很稳定,并且已经存在了更长的时间。套接字激活对于服务解耦来说非常有趣:它允许服务并行启动,即使它们需要通信,它允许服务独立重启。如果您有一个支持
xinetd
-style 激活的服务,它可以与套接字激活一起使用:带有 的.socket
描述的Accept=true
行为方式与xinetd
. 您还需要一个.service
文件来描述该服务。systemd 套接字激活的全部好处需要提供服务的守护进程的支持。请参阅有关该主题的博客文章。我的建议往往是“如果它没有损坏,就不要修复它”,但如果你想将
xinetd
基于 - 的服务转换为 systemd,这当然是可行的。您可以使用其中一个
xinetd
或systemd
用于套接字激活,两者都可以。我个人觉得xinetd
更容易使用,因为所有内容都在一个文件中,但也使用过systemd
,因为它更灵活,尤其是在侦听多个地址和将套接字转发到 UNIX 套接字而不仅仅是 IP 套接字时。这里作为一个例子,我用来将 TCP 连接转发到 MySQL 文件套接字:
/etc/systemd/system/mysql-proxy.service
/etc/systemd/system/mysql-proxy.socket
传统的转发需求
Accept=true
,systemd
感知进程应该在一个进程中处理多个连接或根据需要分叉额外的进程。