首页/系统/Linux 运维命令速查/socket 单元与按需启动
systemd 与服务42 条

socket 单元与按需启动

socket 激活:监听端口的 socket unit 先启动,首个连接到达才拉起对应 service(systemd 把监听 fd 传给它),降内存也提启动速度。

Linux 运维命令速查系统更新于 2026-10-12
用途服务按需唤醒与时序解耦
语法xx.socket(ListenStream=…)+ xx@.service
查看systemctl list-sockets)

示例

示例
# /etc/systemd/system/myapp.socket
[Unit]
Description=myapp socket
[Socket]
ListenStream=127.0.0.1:8081
[Install]
WantedBy=sockets.target

# 服务从 socket 继承 fd(Accept=no 时 GetFD 方式,进程需配合 sd_listen_fds)
systemctl enable --now myapp.socket
systemctl list-sockets --no-pager | head
传统服务没有 systemd 库支持时用 Accept=yes 的 inetd 风格(每连接一个实例),适用简单场景。

易错点

  • 应用不读 systemd 传入的 fd(sd_listen_fds)时要自行绑定,会出现端口冲突报错
  • socket 单元 enable 了但 service 被 mask:连接进来自动拉起失败,先 systemctl is-enabled 全链检查

数据来源与参考

  • man 5 systemd.socket
  • systemd 官方文档:socket activation

相关工具

​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌