You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Fedora Server 36下libvirtd无法自启且运行2分钟自动关闭

问题背景
  • 环境:全新最小化安装Fedora Server 36,服务器仅用于部署KVM虚拟化环境
  • 初始操作:执行dnf group install "Headless Virtualization"安装无头虚拟化组件组,安装完成后重启服务器
  • 初始异常:执行systemctl status libvirtd查询服务状态,发现libvirtd默认未运行,初始状态输出如下:
[root@dell-fedora-kvm ~]# systemctl status libvirtd
○ libvirtd.service - Virtualization daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: disabled)
     Active: inactive (dead)
TriggeredBy: ○ libvirtd-tcp.socket
             ○ libvirtd-admin.socket
             ○ libvirtd-ro.socket
             ○ libvirtd-tls.socket
             ○ libvirtd.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
  • 手动操作后的异常:
    1. 先后执行systemctl start libvirtd手动启动服务、systemctl enable libvirtd设置开机自启,重启服务器后libvirtd依然不会自动启动
    2. 手动启动服务后,服务可正常运行,运行状态输出如下:
[root@dell-fedora-kvm ~]# systemctl status libvirtd
● libvirtd.service - Virtualization daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: disabled)
     Active: active (running) since Sun 2022-07-03 16:32:23 AEST; 52s ago
TriggeredBy: ○ libvirtd-tcp.socket
             ● libvirtd-admin.socket
             ● libvirtd-ro.socket
             ○ libvirtd-tls.socket
             ● libvirtd.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
   Main PID: 857 (libvirtd)
      Tasks: 21 (limit: 32768)
     Memory: 44.8M
        CPU: 480ms
     CGroup: /system.slice/libvirtd.service
             ├─ 857 /usr/sbin/libvirtd --timeout 120
             ├─ 957 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             └─ 958 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

Jul 03 16:32:23 dell-fedora-kvm systemd[1]: Started libvirtd.service - Virtualization daemon.
Jul 03 16:32:24 dell-fedora-kvm dnsmasq[957]: started, version 2.86 cachesize 150
Jul 03 16:32:24 dell-fedora-kvm dnsmasq[957]: compile time options: IPv6 GNU-getopt DBus no-UBus no-i18n IDN2 DHCP DHCPv6 no-Lua TFTP conntrack ipset auth cryptohash
Jul 03 16:32:24 dell-fedora-kvm dnsmasq-dhcp[957]: DHCP, IP range 192.168.122.2 -- 192.168.122.254, lease time 1h
Jul 03 16:32:24 dell-fedora-kvm dnsmasq-dhcp[957]: DHCP, sockets bound exclusively to interface virbr0
Jul 03 16:32:24 dell-fedora-kvm dnsmasq[957]: reading /etc/resolv.conf
Jul 03 16:32:24 dell-fedora-kvm dnsmasq[957]: using nameserver 127.0.0.53#53
Jul 03 16:32:24 dell-fedora-kvm dnsmasq[957]: read /etc/hosts - 2 addresses
Jul 03 16:32:24 dell-fedora-kvm dnsmasq[957]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Jul 03 16:32:24 dell-fedora-kvm dnsmasq-dhcp[957]: read /var/lib/libvirt/dnsmasq/default.hostsfile
  1. 手动启动的服务会在运行约2分钟后自动关闭,关闭时状态输出如下,用户未修改过libvirtd.service原生配置:
[root@dell-fedora-kvm ~]# systemctl status libvirtd
○ libvirtd.service - Virtualization daemon
     Loaded: loaded (/usr/lib/systemd/system/libvirtd.service; enabled; vendor preset: disabled)
     Active: inactive (dead) since Sun 2022-07-03 16:37:25 AEST; 6s ago
TriggeredBy: ○ libvirtd-tcp.socket
             ● libvirtd-admin.socket
             ● libvirtd-ro.socket
             ○ libvirtd-tls.socket
             ● libvirtd.socket
       Docs: man:libvirtd(8)
             https://libvirt.org
    Process: 994 ExecStart=/usr/sbin/libvirtd $LIBVIRTD_ARGS (code=exited, status=0/SUCCESS)
   Main PID: 994 (code=exited, status=0/SUCCESS)
      Tasks: 2 (limit: 32768)
     Memory: 31.7M
        CPU: 330ms
     CGroup: /system.slice/libvirtd.service
             ├─ 957 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper
             └─ 958 /usr/sbin/dnsmasq --conf-file=/var/lib/libvirt/dnsmasq/default.conf --leasefile-ro --dhcp-script=/usr/libexec/libvirt_leaseshelper

Jul 03 16:35:25 dell-fedora-kvm systemd[1]: Starting libvirtd.service - Virtualization daemon...
Jul 03 16:35:25 dell-fedora-kvm systemd[1]: Started libvirtd.service - Virtualization daemon.
Jul 03 16:35:25 dell-fedora-kvm dnsmasq[957]: read /etc/hosts - 2 addresses
Jul 03 16:35:25 dell-fedora-kvm dnsmasq[957]: read /var/lib/libvirt/dnsmasq/default.addnhosts - 0 addresses
Jul 03 16:35:25 dell-fedora-kvm dnsmasq-dhcp[957]: read /var/lib/libvirt/dnsmasq/default.hostsfile
Jul 03 16:37:25 dell-fedora-kvm systemd[1]: libvirtd.service: Deactivated successfully.
Jul 03 16:37:25 dell-fedora-kvm systemd[1]: libvirtd.service: Unit process 957 (dnsmasq) remains running after unit stopped.
Jul 03 16:37:25 dell-fedora-kvm systemd[1]: libvirtd.service: Unit process 958 (dnsmasq) remains running after unit stopped.
故障根本原因

这不是配置错误,是Fedora 36中libvirtd的默认设计逻辑:

  • 从Fedora 34版本开始,libvirtd默认采用socket按需激活模式,而非传统的开机常驻运行模式。你看到的libvirtd.socket等5个socket单元就是激活触发器:只有当有libvirt客户端(比如virsh、virt-manager)连接对应socket时,系统才会临时拉起libvirtd进程处理请求。
  • 服务启动参数中默认带--timeout 120配置,意思是如果libvirtd连续120秒没有收到任何客户端请求,就会自动退出释放资源,这就是手动启动后2分钟服务自动关闭的原因。
  • 执行systemctl enable libvirtd只是设置了服务单元本身的开机自启,但默认模式下开机不会主动触发服务启动,只有socket收到连接请求才会启动服务,所以重启后默认看不到libvirtd进程运行,属于正常现象。
排查与解决方案

根据使用场景二选一即可:

方案1:保留默认按需启动模式(推荐,资源占用更低)

不需要额外修改配置,这种模式不影响KVM正常使用:

  • 当执行virsh list等libvirt操作命令,或者有其他管理工具连接libvirt时,系统会自动启动libvirtd进程,操作无感知
  • 空闲自动退出是预期行为,不会影响已经运行的虚拟机,虚拟机进程由libvirt_qemu相关进程托管,和libvirtd主进程生命周期无关
  • 验证方式:直接执行virsh list --all,再查询服务状态,会发现libvirtd已经被自动拉起

方案2:改为传统常驻运行模式(适合需要libvirtd长期运行的场景)

如果不想用按需启动,要让libvirtd开机就启动、且不会因为空闲自动退出,按以下步骤操作:

  1. 停止并禁用默认的socket激活单元:
systemctl stop libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tcp.socket libvirtd-tls.socket
systemctl disable libvirtd.socket libvirtd-ro.socket libvirtd-admin.socket libvirtd-tcp.socket libvirtd-tls.socket
  1. 覆盖默认的服务启动参数,去掉超时退出配置:
mkdir -p /etc/systemd/system/libvirtd.service.d/
cat > /etc/systemd/system/libvirtd.service.d/override.conf <<EOF
[Service]
Environment=LIBVIRTD_ARGS="--timeout 0"
EOF

--timeout 0表示禁用空闲自动退出逻辑
3. 重载systemd配置,设置libvirtd开机自启并立即启动:

systemctl daemon-reload
systemctl enable --now libvirtd
  1. 验证:重启服务器后执行systemctl status libvirtd,会看到服务保持active(running)状态,且不会再2分钟后自动退出。

注意:不要直接修改/usr/lib/systemd/system/libvirtd.service原生文件,后续系统更新会覆盖该文件,用上面的override.conf方式自定义配置是官方推荐的做法。

内容的提问来源于stack exchange,提问作者Thomas Meier

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.27 11:18:15