systemctl --enable 启用套接字而不是服务

systemctl --enable 启用套接字而不是服务

与常见的一样,它lxd提供两个 systemd 单元:lxd.socketlxd.servicelxd.socket启动时,lxd.service只要任何应用程序(例如lxc)尝试访问 lxd 守护进程,它就会启动。

我想lxd在启动时启动,而不必运行任何命令。但是,当我尝试启用时lxd.service,它lxd.socket反而启用了:

# systemctl enable lxd.service
Created symlink /etc/systemd/system/sockets.target.wants/lxd.socket → /usr/lib/systemd/system/lxd.socket.

这是怎么回事?我该如何启用lxd.service


系统运行的是 Fedora 39。这些是单元文件:

/usr/lib/systemd/system/lxd.service

[Unit]
Description=LXD - main daemon
After=network-online.target openvswitch-switch.service lxcfs.service lxd.socket
Requires=network-online.target lxcfs.service lxd.socket
Documentation=man:lxd(1)

[Service]
Environment=LXD_DOCUMENTATION=/usr/share/doc/lxd-doc/html
Environment=LXD_OVMF_PATH=/usr/share/edk2/ovmf
Environment=LXD_UI=/usr/share/lxd-ui/ui
ExecStart=/usr/bin/lxd --group lxd
ExecStartPost=/usr/bin/lxd waitready --timeout=600
KillMode=process
TimeoutStartSec=600s
TimeoutStopSec=30s
Restart=on-failure
LimitNOFILE=1048576
LimitNPROC=infinity
TasksMax=infinity

[Install]
Also=lxd-containers.service lxd.socket

/usr/lib/systemd/system/lxd.socket

[Unit]
Description=LXD - unix socket
Documentation=man:lxd(1)

[Socket]
ListenStream=/var/lib/lxd/unix.socket
SocketGroup=lxd
SocketMode=0660
Service=lxd.service

[Install]
WantedBy=sockets.target

答案1

您看到的行为是由Also服务单元中的关键字驱动的,您可以阅读这里

由于服务单元未在 部分中指定WantedBy(或RequiredBy)指令[Install],因此这Also实际上意味着“而是”:当您 时systemctl enable lxd.service,而是启用lxd-containers.servicelxd.socket

您可以尝试简单地添加WantedBy=default.target到该[Install]部分,以便lxd服务在启动时自动启动。systemctl daemon-reload编辑单元后(或创建插入式配置后)不要忘记这样做。

相关内容