与常见的一样,它lxd
提供两个 systemd 单元:lxd.socket
和lxd.service
。lxd.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.service
和lxd.socket
。
您可以尝试简单地添加WantedBy=default.target
到该[Install]
部分,以便lxd
服务在启动时自动启动。systemctl daemon-reload
编辑单元后(或创建插入式配置后)不要忘记这样做。